存储过程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' --这个允许调用链接服务器上的存储过程
---开启该连接服务器的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会报错
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会报错