从Excel导入时通过RODBC查询SQL数据库时出错

我正在使用sqlQuery提交一个SQL查询到ODBC数据库,并尝试检索结果

以下R脚本工作

 x = "'2013-12-19'" sqlQuery(channel,paste("USE [JWFX] DELETE FROM Currency$ WHERE [Date] = ",x,"; DELETE FROM MktIndex$ WHERE [Date] = ",x)) 

虽然在R中调用以下R scritp(其查询在SQL Server上正常工作时不起作用)

 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');'" 

为什么会发生? 任何提示?

您不能将GO包含在通过ODBC提交的SQLstring中,只能在SQL Server Management Studio中用于分隔批次。

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

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

通过省略第一部分:

 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 

该查询正常工作,并正确地插入到数据库中我们通过SELECTselect的行…