从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的行…