简体   繁体   中英

Multipart queries in SQL Server with RODBC

I am trying to use GO to get R to pull a multipart query from a SQL Server database but R keeps erroring out on me when I try this. Does anyone know a workaround to get RODBC to run multipart queries?

Example query:

query2 = "IF OBJECT_ID('tempdb..#ATTTempTable') IS NOT NULL
  DROP TABLE #ATTTempTable

GO

SELECT
    * INTO #ATTTempTable
FROM ETL.ATT.fact_responses fr
WHERE fr.ResponseDateTime > '2015-07-06'
"
channel <- odbcConnect("<host name>", uid="<uid>", pwd="<pwd>")
raw = sqlQuery(channel, query2)
close(channel)

and result

> raw
[1] "42000 102 [Microsoft][ODBC Driver 11 for SQL Server][SQL Server]Incorrect syntax near 'GO'."                                                                                                                                               
[2] "[RODBC] ERROR: Could not SQLExecDirect 'IF OBJECT_ID('tempdb..#ATTTempTable') IS NOT NULL\n  DROP TABLE #ATTTempTable\n\nGO\n\nSELECT\n\t* INTO #ATTTempTable\nFROM ETL.ATT.fact_responses fr\nWHERE fr.ResponseDateTime > '2015-07-06'\n'"
> 

Because your query contains multiple line with conditional logic it resembles a stored procedure.

Simply save that stored procedure in SQL Server:

CREATE PROCEDURE sqlServerSp @ResponseDateTime nvarchar(10)
AS    
IF OBJECT_ID('tempdb..#ATTTempTable') IS NOT NULL
  DROP TABLE #ATTTempTable;    
GO    
-- suppresses affected rows message so RODBC returns a dataset 
SET NO COUNT ON;  
GO
-- runs make-table action query
SELECT * INTO #ATTTempTable
FROM ETL.ATT.fact_responses fr
WHERE fr.ResponseDateTime > @ResponseDateTime;
GO

And then run the stored procedure in R. You can even pass parameters like the date:

channel <- odbcConnect("<host name>", uid="<uid>", pwd="<pwd>")
raw = sqlQuery(channel, "EXEC sqlServerSp @ResponseDateTime='2015-07-06'")
close(channel)

You can't. See https://msdn.microsoft.com/en-us/library/ms188037.aspx

you have to divide your query into two statements and run them separately.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM