简单地插入到临时表并失败

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 行是问题所在,但我无法理解这一点。这是因为存储过程本身有多个存储过程吗?

Aar*_*and 7

发生错误是因为存储过程还有一个 #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...