周广明的博客

.Net & MS SQL Tech
  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

INSERT EXEC PROC不能嵌套的解决方法

Posted on 2009-02-17 19:44  Zhougm  阅读(5733)  评论(0编辑  收藏  举报

存储过程A返回一个结果集,存储过程B用INSERT/EXEC PROC将A返回的结果集存入一个临时表中并返回一个结果集,如果存储过程C用INSERT/EXEC PROC再将B的结果集存入一个临时表,这时会报错:An INSERT EXEC statement cannot be nested(INSERT EXEC 语句不能嵌套).

先建一个连接到自身数据库的连接服务器并开启该连接服务器的RPC功能,包含RPC和RPC输出项,如下两种方式:

---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;'
 
---B.创建链接服务器
exec sp_addlinkedserver  'srv_lnk','','SQLOLEDB','远程服务器名或ip地址'
exec sp_addlinkedsrvlogin 'srv_lnk','false',null,'用户名','密码'
exec sp_serveroption 'srv_lnk','rpc','true'
exec sp_serveroption 'srv_lnk','rpc out','true'  --这个允许调用链接服务器上的存储过程

---用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会报错