Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server &引用;[RODBC]错误:无法SQLExecDirect“;因为在过程中插入语句_Sql Server_R_Stored Procedures_Insert_Rodbc - Fatal编程技术网

Sql server &引用;[RODBC]错误:无法SQLExecDirect“;因为在过程中插入语句

Sql server &引用;[RODBC]错误:无法SQLExecDirect“;因为在过程中插入语句,sql-server,r,stored-procedures,insert,rodbc,Sql Server,R,Stored Procedures,Insert,Rodbc,所有涉及的表都是select、update、delete和insert。我正试图执行一个过程并得到那个错误 我使用了odbcDriverConnect,因为我想任何连接参数都可以解决我的问题(我尝试了trusted\u connection和autocommit) 如果我从过程中退出insert,它运行正常。 当我尝试运行插入时,会出现相同的错误 cc = odbcDriverConnect(connection = paste0('DRIVER={SQL Server};SERVER=loca

所有涉及的表都是select、update、delete和insert。我正试图执行一个过程并得到那个错误

我使用了
odbcDriverConnect
,因为我想任何连接参数都可以解决我的问题(我尝试了
trusted\u connection
autocommit

如果我从过程中退出
insert
,它运行正常。
当我尝试运行
插入时,会出现相同的错误

cc = odbcDriverConnect(connection = paste0('DRIVER={SQL Server};SERVER=localhost;DATABASE=XX;UID=user;PWD=pass;autocommit=True;trusted_connection=true'))
rst = sqlQuery(cc, 'exec dbo.usp_mm_xx')
print(rst)
[1] "[RODBC] ERROR: Could not SQLExecDirect 'exec dbo.usp_mm_xx'"
query=paste0('insert INTO dbo.X select * FROM dbo.Y a ',
             'where not exists (select 1 from dbo.X b where a.c1=b.c1 and a.c2=b.c2)')
rst=sqlQuery(cc, query)
print(rst)
[1] "[RODBC] ERROR: Could not SQLExecDirect 'insert INTO dbo.X SELECT *  FROM dbo.Y a where not exists (select 1 from dbo.X b where a.c1=b.c2 and a.c2=b.c2)'"

SQL语句在同一用户的数据库上运行正常。

您的过程的第一行需要“SETNOCOUNT on”指令

过程中的insert指令有一个返回给客户端的结果,即行计数。当insert出现在select指令之前时,我们当然希望客户机中出现select结果,但是客户机会收到多个结果,并且insert行数会排在第一位


通常,当这种情况发生时,我们会收到空的结果集。似乎RODBC在处理多个结果集时遇到了更大的麻烦。

补充@Dennestrores答案,要使用
sqlQuery
运行
插入到
,需要预先设置
无计数
插入
语句:

query=paste0('set nocount on; insert INTO dbo.X select * FROM dbo.Y a ',
         'where not exists (select 1 from dbo.X b where a.c1=b.c1 and a.c2=b.c2)')
rst=sqlQuery(cc, query)
print(rst)
character(0)

Excute
是否也被授予?是,在授予程序后执行。它在我退出insert时运行。该过程的第一行是否有“SETNOCOUNT on”指令?它应该有。tks,@DennesTorres,它成功了!你愿意回答吗,这样我就可以投你一票了?
插入到
不工作的原因是什么?也许是排队数?