Sql server &引用;[RODBC]错误:无法SQLExecDirect“;因为在过程中插入语句
所有涉及的表都是select、update、delete和insert。我正试图执行一个过程并得到那个错误 我使用了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
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,它成功了!你愿意回答吗,这样我就可以投你一票了?插入到
不工作的原因是什么?也许是排队数?