2012-06-06 153 views
3

有許多關於將scope_identity從子項傳遞給父存儲過程的討論。我有一個相反的場景,在父存儲過程中插入行,並且我想將標識值傳遞給子存儲過程。將scope_identity傳遞給存儲過程

但是,直接將scope_identity傳遞給子過程會在SQL Server Management Studio中生成一個分析錯誤。

create procedure parent 
as 
begin 
    -- insert a record 
    exec child scope_identity() -- this does not work 
end 

但是,使用局部變量可以解決問題。

create procedure parent 
as 
begin 
    -- insert a record 
    set @id = scope_identity() 
    exec child @id -- this works 
end 

什麼原因導致直接通過scope_identity()作爲輸入參數失敗?

+0

可能的重複[轉換整型和連接到TSQL中的varchar](http://stackoverflow.com/questions/4936180/cast-integer-and-concatenate-to-varchar-in-tsql) –

+0

句法上允許你被允許傳遞一些函數(例如'@@ IDENTITY')。展開此列表[是Connect網站上的打開請求](https://connect.microsoft.com/SQLServer/feedback/details/352110/t-sql-use-scalar-functions-as-stored-procedure-parameters) –

+0

@Martin - 謝謝。這是我第一次瞭解到,經過這麼多年後,我無法將表達作爲參數。我有點震驚。 SQL2012已經出來,但不知道這是否得到改善。 – intangible02

回答

3

無法將函數結果作爲存儲過程參數傳遞。你需要做後一種方法,通過將結果保存到一個變量,然後傳遞變量。

+0

感謝您提供答案。看來我必須忍受這個臨時變量。 – intangible02

相關問題