2013-03-07 43 views
1

從存儲過程返回值我有一個存儲過程與兩個插入語句。我想從第一張插頁中返回ID。它看起來大致是這樣的:(。在這種情況下,ID 6從myTable,一些奇怪的原因)使用scope_identity()

declare @retVal int 
Begin transaction 

insert into myTable(..) values (..) 

set @retVal = scope_identity() 

insert into myTable2(..) values(..) 

Commit transaction 

return @retVal 

當我這樣做,插入語句工作正常,但相同的值返回每次

有人會猜測發生了什麼嗎?

+0

它將有助於查看完整的模式設置,包括表創建和完整tsql。你發佈的內容沒有錯,但我懷疑你的實際代碼更復雜? – 2013-03-07 18:46:13

+0

不要使用return(http://msdn.microsoft.com/library/ms174998(v=sql.105).aspx) 我建議你用* SELECT *替換* RETURN *,它應該可以工作 – jazzytomato 2013-03-07 18:48:54

+2

或者使用輸出參數... – canon 2013-03-07 18:49:16

回答

6

請使用OUTPUT參數。 RETURN用於返回狀態/錯誤代碼,而不是數據。例如,RETURN只能處理INT。猜猜當您更改表格使用BIGINT時會發生什麼情況,因爲INT還不夠?

ALTER PROCEDURE dbo.YourProcedure 
    @params VARCHAR(32), 
    @Table1ID INT = NULL OUTPUT 
AS 
BEGIN 
    SET NOCOUNT ON; 

    BEGIN TRANSACTION; 

    INSERT dbo.Table1... 
    SET @Table1ID = SCOPE_IDENTITY(); 
    INSERT dbo.Table2... 

    COMMIT TRANSACTION; 
END 
GO 
+0

使用輸出參數訣竅,非常感謝大家。我很高興從這裏開始走這條路。 – larryq 2013-03-07 22:26:16

+0

它返回@ Table1ID值和RETURN值...如何僅抑制Table1ID? – Bhat 2017-01-21 12:22:05

+0

對不起@bhat,我不明白這個問題。也許你應該創建一個新的問題。 – 2017-01-21 14:31:26