存储过程C返回一个结果集,存储过程B用INSERT/EXEC PROC将C返回的结果集存入一个临时表中并返回一个结果集,
如果存储过程A用INSERT/EXEC PROC再将B的结果集存入一个临时表,这时会报错:INSERT EXEC 语句不能嵌套。
如果存储过程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
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设置)
只要过程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会报错