2013-12-20 47 views
0
我使用 sqlQuery提交一个SQL查询到ODBC数据库,并尝试检索结果

导入通过RODBC

查询SQL数据库时

下列R-脚本工作

x = "'2013-12-19'" 

sqlQuery(channel,paste("USE [JWFX] 

DELETE FROM Currency$ 
WHERE [Date] = ",x,"; 

DELETE FROM MktIndex$ 
WHERE [Date] = ",x)) 

虽然下列R- scritp,其查询正确适用于SQL中的R调用时服务器不工作:

sqlQuery(channel, 
"USE [JWFX] GO 
EXEC master . dbo. sp_MSset_oledb_prop N'Microsoft.ACE.OLEDB.12.0' , N'AllowInProcess' , 1 GO 
EXEC master . dbo. sp_MSset_oledb_prop N'Microsoft.ACE.OLEDB.12.0' , N'DynamicParameters' , 1 GO 
INSERT INTO Currency$ 
SELECT * FROM 
OPENROWSET('Microsoft.ACE.OLEDB.12.0', 'Excel 8.0;Database= C:/Users/admin/Dropbox/SQL Server/DatabaseInput/BBGdata.xlsx;','SELECT * FROM [Currency$] WHERE Date = 41627');") 

,并返回以下错误:

[1] "42000 102 [Microsoft][SQL Server Native Client 11.0][SQL Server]Incorrect syntax near 'GO'."                                                                                             
[2] "42000 102 [Microsoft][SQL Server Native Client 11.0][SQL Server]Incorrect syntax near 'GO'."                                                                                             
[3] "[RODBC] ERROR: Could not SQLExecDirect 'USE [JWFX] GO\nEXEC master . dbo. sp_MSset_oledb_prop N'Microsoft.ACE.OLEDB.12.0' , N'AllowInProcess' , 1 GO\nEXEC master . dbo. sp_MSset_oledb_prop N'Microsoft.ACE.OLEDB.12.0' , N'DynamicParameters' , 1 GO\nINSERT INTO Currency$\nSELECT * FROM \nOPENROWSET('Microsoft.ACE.OLEDB.12.0', 'Excel 8.0;Database= C:/Users/admin/Dropbox/SQL Server/DatabaseInput/BBGdata.xlsx;','SELECT * FROM [Currency$] WHERE Date = 41627');'" 

为什么会发生这种情况?任何提示?

+0

RODBC不太可能支持复杂的东西一样那。我只会依赖基础知识。 – joran

+0

@joran:我怀疑这与R有什么关系。它可能是SQL Server和/或Excel ODBC驱动程序的限制。 –

+0

这就是我的意思,但我不清楚RODBC和驱动程序本身之间的区别。 – joran

回答

2

您不能在通过ODBC提交的SQL字符串中包含GO,它仅在SQL Server Management Studio中用于分隔批次。

在这种情况下,如果连接字符串指向数据库JWFX,则不需要第一行USE [JWFX] GO

将剩下的分成三个不同的批次,并删除它们之间的GO语句。

0

通过省略第一部分:

USE [JWFX] GO 
EXEC master . dbo. sp_MSset_oledb_prop N'Microsoft.ACE.OLEDB.12.0' , N'AllowInProcess' , 1 GO 
EXEC master . dbo. sp_MSset_oledb_prop N'Microsoft.ACE.OLEDB.12.0' , N'DynamicParameters' , 1 GO 

查询正常工作,并正确地将插入到数据库中,我们通过SELECT选择的行...