簡體   English   中英

從另一個存儲過程交叉應用調用存儲過程會導致錯誤SQL Server

[英]Calling Stored procedure with cross apply from another stored procedure gives error SQL server

我一直試圖從另一個存儲過程中調用存儲過程。 現在的問題是,在嵌套的存儲過程中,包含與臨時表的CROSS APPLY,當我直接執行它時,它運行良好。

但是,當我嘗試從其他SP調用此SP時,它給出了該列之一無效的錯誤。 在這種情況下為“無效的列名'levels'”。

另外,當我從帶有傳遞參數的調用SP SQL窗口執行此SP時,它運行良好,整個主過程開始平穩運行。

我不知道為什么會發生此問題。 下面是一種實現方式,供參考。 1.)主SP

CREATE STORED PROCEDURE ....

INSERT INTO #TempTable
EXEC [Child_SP] @Param1 = 1, @Param2 = 1
...

給出錯誤。 2.)一旦我從主PS一次執行以下給定的單個語句。 它開始正常工作。

EXEC [Child_SP] @Param1 = 1, @Param2 = 1

3.)子SP的臨時表具有CROSS APLLY。 像下面這樣。

SELECT ID, '1,2,3,4,5' AS levels
INTO #Temp1
FROM ABC

SELECT ID
FROM #Temp1 x0
CROSS APPLY (SELECT * FROM dbo.iter_charlist_to_table(x0.levels, ',') AS x) x1 
WHERE x1.listPos > 1

“ iter_charlist_to_table”是表值函數,它從逗號分隔的列表中獲取表的值。

它是否與SQL Thread有關,或者是什么問題? 謝謝。

我建議使用此代碼將tmp表放在SP的開頭,因為您的插入INTO總是會嘗試創建該表,如果已經存在則沒有關系。

IF OBJECT_ID('tempdb..#Temp1') IS NOT NULL DROP TABLE #Temp1

如果您共享更多代碼,將會對理解有所幫助。

並且以防萬一不要忘了在表上放置別名,也許有時不需要進行此更正,但這是避免在已連接表上查詢數據時出現問題的一種很好的做法

SELECT x0.ID
FROM #Temp1 x0
CROSS APPLY (SELECT fnAlias.* FROM dbo.iter_charlist_to_table(x0.levels, ',')  fnAlias) x1 
WHERE x1.listPos > 1

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM