sql INSERT EXEC 語句不能嵌套 解決方案


存儲過程C返回一個結果集,存儲過程B用INSERT/EXEC PROC將C返回的結果集存入一個臨時表中並返回一個結果集,
如果存儲過程A用INSERT/EXEC PROC再將B的結果集存入一個臨時表,這時會報錯:INSERT EXEC 語句不能嵌套。
解決方法就是:
將過程B的INSERT/EXEC PROC語句替換為
insert into #T
SELECT *  
FROM OPENROWSET('MSDASQL',
       'DRIVER={SQL Server};SERVER=192.168.0.1;UID=sa;PWD=111111;Initial Catalog=Pubs',
       'EXEC pubs.dbo.pc') AS A
即可,不過好像在過程A中要先執行一下過程B才行,即在A過程的語句INSERT/EXEC PROC的前面加上exec B。
只要過程B先執行一次,以后可以不用再執行A也能夠正常執行了,這樣可將過程B設置為啟動時執行即可(用系統過程sp_procoption設置)
---A.建一個連接到自身數據庫的連接服務器
---開啟該連接服務器的RPC功能,右擊該連接服務器,單擊屬性,單擊服務器選項,然后選中RPC和RPC輸出項即可
EXEC sp_addlinkedserver 
 @server  = 'self', 
 @srvproduct  = '', 
 @provider  = 'MSDASQL',
 @datasrc  = NULL,
 @location  = NULL,
 @provstr  = 'DRIVER={SQL Server};Server=(local);Initial Catalog=master;uid=sa;pwd=123;'
 
create proc pC
as
select top 10 * from authors
drop proc pB
create proc pB
as 
select  * into #T from authors where 1=0
--insert into #T exec pc
insert into #T
SELECT * 
FROM OPENROWSET('MSDASQL',
       'DRIVER={SQL Server};SERVER=192.168.0.1;UID=sa;PWD=111111;Initial Catalog=Pubs',
       'EXEC pubs.dbo.pc') AS A
select * from #T
create proc pA
as 
select  * into #T from authors where 1=0
exec pb
insert into #T exec pB
select * from #T
 
 
exec pB
exec pA
 

 

或者用下面的方法解決:

 
---B.創建鏈接服務器
---用SQL命令建立與本Server的Linked Server.
Exec   sp_addlinkedserver     '172.26.40.8','','SQLOLEDB','172.26.40.8'   
Exec   sp_addlinkedsrvlogin   '172.26.40.8','false',null,'sa','123'   
exec sp_serveroption '172.26.40.8','rpc','true'
exec sp_serveroption '172.26.40.8','rpc out','true'  --這個允許調用鏈接服務器上的存儲過程
 

調用示例如下,

Create Table #TempCheckResult(iResult varchar(12),iMessage nvarchar(200))
Declare @iSQL nvarchar(200)
Set @iSQL= 'Exec usp_PAL_CheckCompUsability '+'''SW89080571GN'''+',''W8905001U632A'''+',''Repair'''
Insert Into #TempCheckResult EXEC(@iSQL) ---此句會報錯:An INSERT EXEC statement cannot be nested.
Insert Into #TempCheckResult EXEC [172.26.40.6].PAL_COMPSN_P80.dbo.sp_executesql @iSQL ---@iSQL --須為nvarchar,varchar會報錯

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM