Pet*_*ter 1 sql-server stored-procedures t-sql temporary-tables
谁能告诉我为什么这对我不起作用?
CREATE TABLE #UndistributedCmds
(
pendingcmdcount int,
estimatedprocesstime INT
)
INSERT INTO #UndistributedCmds
EXEC sp_replmonitorsubscriptionpendingcmds ...
Run Code Online (Sandbox Code Playgroud)
错误:
消息 8164,级别 16,状态 1,过程 sp_replmonitorsubscriptionpendingcmds,第 152 行
INSERT EXEC 语句不能嵌套。
该错误似乎暗示存储过程定义的第 152 行是问题所在,但我无法理解这一点。这是因为存储过程本身有多个存储过程吗?
发生错误是因为存储过程还有一个 #temp 表或表变量,并使用insert...exec
. 你可以通过查看它来看到它OBJECT_DEFINITION()
:
insert into @countab (pendingcmdcount)
exec @retcode = sys.sp_MSget_repl_commands
Run Code Online (Sandbox Code Playgroud)
所以基本上你要求这个(伪代码):
INSERT INTO #outer EXEC
(SELECT * FROM (INSERT INTO #inner EXEC ... ));
Run Code Online (Sandbox Code Playgroud)
insert...exec
由于未知/未记录的原因,SQL Server 中禁止这种调用嵌套。典型的解决方法是:
SELECT * INTO #UndistributedCmds
FROM OPENQUERY([LoopbackLinkedServer], N'EXEC procedure...');
Run Code Online (Sandbox Code Playgroud)
您将需要一个引用本地服务器计算机的链接服务器,并且需要将“数据访问”属性设置为 true...