RODB C :: sqlQuery с временными таблицами дает пустой символьный вектор, хотя запрос работает в SSMS и меньшие запросы работают с тем же соединением - PullRequest
0 голосов
/ 08 января 2020

Я пытаюсь извлечь фрейм данных из результатов запроса SQL. Я использую RODB C для этого из-за проблем совместимости между ПК при использовании odb c и DBI. Соединение указывается так:

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 наблюдениями, как и ожидалось, поэтому соединение все еще работает.

Исходный запрос занимает около 2 минут для выполнения в SQL Sever Management Studio и, по-видимому, занимает примерно тот же период для запуска в R, однако это просто приводит к пустому символьному вектору

Кто-нибудь знает, почему это может быть?

1 Ответ

0 голосов
/ 08 января 2020

Обновление:

Удаление временных таблиц, кажется, заставило запрос работать снова, что странно, потому что я мог поклясться, что вчера он работал нормально.

новый скрипт, который я использую (не совсем уверен, что случилось с отступом):

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]
                           ")
...