Sql-Server

簡單地插入臨時表並失敗

  • October 8, 2015

誰能告訴我為什麼這對我不起作用?

CREATE TABLE #UndistributedCmds
(
pendingcmdcount int,
estimatedprocesstime INT
)
INSERT INTO #UndistributedCmds

EXEC sp_replmonitorsubscriptionpendingcmds ...

錯誤:

消息 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   

所以基本上你要求這個(虛擬碼):

INSERT INTO #outer EXEC
 (SELECT * FROM (INSERT INTO #inner EXEC ... ));

insert...exec由於未知/未記錄的原因,在 SQL Server 中禁止這種呼叫嵌套。典型的解決方法是:

SELECT * INTO #UndistributedCmds
 FROM OPENQUERY([LoopbackLinkedServer], N'EXEC procedure...');

您需要一個引用本地伺服器電腦的連結伺服器,並且需要將屬性“數據訪問”設置為 true…

引用自:https://dba.stackexchange.com/questions/117444