2013-10-17 41 views
1

我有一個存儲過程,我從表中刪除一行。SQL Server存儲過程:刪除行的返回ID?

有沒有辦法返回刪除的行的ID?我知道有一種方法可以通過插入(SCOPE_IDENTITY())來實現,但它似乎不適用於刪除操作。

代碼:

BEGIN 
    declare @returnVal int 
    DELETE FROM table WHERE num = 1; 

    set @returnVal = /*HOW TO GET ID OF ROW DELETED?*/ 
END; 
+0

請顯示SP的代碼 - 否則將無法幫助您(除了猜測可能需要一段時間)。 – Hogan

+0

SCOPE_IDENTITY()用於獲取表中最後創建/插入的ID。它不會給你最後刪除的ID。 –

回答

4

當然可以。從here: -

CREATE TABLE TestTable (ID INT, TEXTVal VARCHAR(100)) 
----Creating temp table to store ovalues of OUTPUT clause 
DECLARE @TmpTable TABLE (ID INT, TEXTVal VARCHAR(100)) 
----Insert values in real table 
INSERT TestTable (ID, TEXTVal) 
VALUES (1,'FirstVal') 
INSERT TestTable (ID, TEXTVal) 
VALUES (2,'SecondVal') 
----Update the table and insert values in temp table using Output clause 
DELETE 
FROM TestTable 
OUTPUT Deleted.ID, Deleted.TEXTVal INTO @TmpTable 
WHERE ID IN (1,2) 
----Check the values in the temp table and real table 
----The values in both the tables will be same 
SELECT * FROM @TmpTable 
SELECT * FROM TestTable 
----Clean up time 
DROP TABLE TestTable 
GO 
+1

謝謝。令人驚訝的是,這是令人費解的。 –

+0

絕對絕對不要使用第二個代碼becasue觸發器一次處理多個記錄。任何爲插入或刪除標量變量中的字段設置值的觸發器都是錯誤的,需要修復。第一個是正確的,所以我不會低估它。 – HLGEM

+0

@HLGEM: - 這是正確的。不想誤導或給出錯誤的解決方案。刪除了。 –

2

你必須運行兩個命令:SELECT來檢索ID和DELETE實際執行deleteion。

BEGIN 
    declare @returnVal int 
    SELECT @returnVal = ID FROM table WHERE num = 1; 
    DELETE FROM table WHERE num = 1; 
END; 

除非您根據ID刪除 - 在這種情況下,您已經知道它。