sql - 带有临时表的 RODBC::sqlQuery 给出了空字符向量,尽管查询在 SSMS 中工作并且较小的查询在相同的连接下工作
问题描述
我正在尝试从 SQL 查询的结果中提取数据框。由于使用 odbc 和 DBI 时 PC 之间的兼容性问题,我正在为此使用 RODBC。连接是这样指定的:
my_server="servername"
my_db = "databasename"
connect_rodbc <- RODBC::odbcDriverConnect(paste0("DRIVER={SQL Server};
server=",my_server,";
database=",my_db,";trusted_connection=true"))
我的脚本中除了一个查询之外的所有查询都工作正常,但昨天工作正常并且在 SQL Server Management Studio 中工作正常的查询现在返回一个空向量而不是所需的数据框,我不知道为什么。
查询格式为:
dataset_needed <- RODBC::sqlQuery(connect_rodbc, "
IF OBJECT_ID ('tempdb..#Date') IS NOT NULL
DROP TABLE #Date
SELECT DISTINCT [Month]
INTO #Date
FROM [dbo].[TIMES_TABLE]
WHERE [Week End Date] BETWEEN DATEADD(MONTH, -2, GETDATE()) and GETDATE()
IF OBJECT_ID ('tempdb..#Product') IS NOT NULL
DROP TABLE #Product
SELECT DISTINCT [Product Code], [Product Group]
INTO #Product
FROM [dbo].[PRODUCT_TABLE]
WHERE [Product Group] IN ('DVDs', 'CDs')
SELECT [Month],
SUM([Volume]) AS 'Volume'
FROM [databasename].[dbo].[SALES_TABLE] r
INNER JOIN #Date d ON r.[Month Code] = d.[Month Code]
INNER JOIN #Product p on r.[Product Code] = p.[Product Code]
GROUP BY [Month]
")
然而:
test <- RODBC::sqlQuery(connect_rodbc, " SELECT TOP 10 * FROM SALES_TABLE")
工作正常并按预期返回具有 10 个观察值的数据框,因此连接仍然有效。
原始查询在 SQL Sever Management Studio 中运行大约需要 2 分钟,在 R 中运行似乎需要大约相同的时间,但它只会导致空字符向量
有谁知道这可能是为什么?
解决方案
更新:
删除临时表似乎导致查询再次工作,这很奇怪,因为我可以发誓它昨天工作正常。
我正在使用的新脚本(不太确定缩进发生了什么)是:
dataset_needed <- RODBC::sqlQuery(connect_rodbc, "
SELECT [Month],
SUM([Volume]) AS 'Volume'
FROM [databasename].[dbo].[SALES_TABLE] r
INNER JOIN
(SELECT DISTINCT [Month]
FROM [dbo].[TIMES_TABLE]
WHERE [Week End Date] BETWEEN DATEADD(MONTH, -2, GETDATE()) and GETDATE()) as d
ON r.[Month Code] = d.[Month Code]
INNER JOIN
(SELECT DISTINCT [Product Code]
FROM [dbo].[PRODUCT_TABLE]
WHERE [Product Group] IN ('DVDs', 'CDs')) as p
ON r.[Product Code] = p.[Product Code]
GROUP BY [Month]
")
推荐阅读
- python - 在 Raspberry Pi 上使用 Chrome Webdriver 的问题
- java - 测试视图是否存在,但我的方法返回 false - 它应该返回 true
- c# - 如何让我的 Windows 服务查看 ROT 中的对象?
- c++ - 使用线程不安全的静态变量锁定嵌套函数
- java - java中的继承(子类的子类)
- c# - 与错误膨胀类 android.widget.TimePicker 相关的问题
- datepicker - 如何在 SwiftUI 中使用 ObservedObject 和 DatePicker?
- python - 使用 Python 3+ 将 DBF 文件转换为 CSV 出现错误
- java - 如何在没有此问题的情况下有效地在 Firestore 聊天应用中存储或检索消息?
- python - 追加新的不完整行数据后自动填充熊猫数据框列