簡體   English   中英

使用SCOPE_IDENTITY會導致另一個查詢

[英]Using SCOPE_IDENTITY result in another query

我在使用此代碼時遇到困難

EXECUTE Environment.dbo.psu_some_psu

@instanceId = 1
,@serverId = 2
,@ip = '111.111.111.111'
,@clientName = 'dev-contact'
,@applicationId = 9
,@accountId = 35
,@userID = 22

DECLARE @restoreId INT
SET @restoreId = SCOPE_IDENTITY()

UPDATE Environment.dbo.restore_requests
SET Status = 1
WHERE Id = @restoreId

默認情況下,該存儲過程將插入一行帶有身份的狀態。 在執行存儲過程之后,我使用scope_identity獲取插入行的ID。 但是我無法使更新生效,我認為WHERE條件存在問題。

謝謝

之所以稱為SCOPE_IDENTITY()是因為它返回插入到當前作用域中的最后一個標識值-並且由於每個過程都有它自己的作用域-您不會獲得預期的結果。

返回插入到同一作用域的標識列中的最后一個標識值。 范圍是一個模塊:存儲過程,觸發器,函數或批處理。 因此,如果兩個語句在同一存儲過程,函數或批處理中,則它們在同一范圍內。

使用輸出參數從實際執行insert語句的過程內部返回scope_identity()

另外,請注意,如果要插入多個記錄, scope_identity()將僅返回最后一個值-在這種情況下,您可以在insert語句上使用output子句來獲取包含所有新插入的標識值的表。

DECLARE @MyTableVar table( NewScrapReasonID smallint,  
                           Name varchar(50),  
                           ModifiedDate datetime);  
INSERT Production.ScrapReason  
    OUTPUT INSERTED.ScrapReasonID, INSERTED.Name, INSERTED.ModifiedDate  
        INTO @MyTableVar  
VALUES (N'Operator error', GETDATE());  

暫無
暫無

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

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