2017-05-26 121 views
1

INSERT語句涉及的所有表都選擇,更新,刪除,插入理所當然的。我正試圖執行一個程序並獲取該錯誤。「[RODBC]錯誤:無法SQLExecDirect的」,因爲內部程序

我用odbcDriverConnect,因爲我猜任何連接參數將解決我的問題(我試過trusted_connectionautocommit)。

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

如果我退出程序insert它運行正常。
當我嘗試運行insert時,出現同樣的錯誤。

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語句在數據庫上運行正常,具有相同的用戶。

+0

是'Excute'也就理所當然? – Sami

+0

是,按照授予的程序執行。它在我退出插入時運行。 – xm1

+0

在第一行有程序指令「Set nocount on」嗎?它應該有。 –

回答

1

您的程序在其第一行中需要指令「Set nocount on」。

插入指令的程序裏面有一個結果,行數,返回給客戶端。當插入選擇指令之前出現,現在好了,可以肯定,希望選擇的結果在客戶端,但是客戶端接收多個結果和插入行數是第一位的。

通常,當這種情況發生,我們收到空的結果集。看起來RODBC在多個結果集上遇到了更大的麻煩。

0

補充@DennesTorres答案,運行一個insert intosqlQuery,需要預先考慮set nocount on;insert聲明:

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) 
相關問題