我有一個存儲過程,我從表中刪除一行。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;
我有一個存儲過程,我從表中刪除一行。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;
當然可以。從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
謝謝。令人驚訝的是,這是令人費解的。 –
絕對絕對不要使用第二個代碼becasue觸發器一次處理多個記錄。任何爲插入或刪除標量變量中的字段設置值的觸發器都是錯誤的,需要修復。第一個是正確的,所以我不會低估它。 – HLGEM
@HLGEM: - 這是正確的。不想誤導或給出錯誤的解決方案。刪除了。 –
你必須運行兩個命令:SELECT來檢索ID和DELETE實際執行deleteion。
BEGIN
declare @returnVal int
SELECT @returnVal = ID FROM table WHERE num = 1;
DELETE FROM table WHERE num = 1;
END;
除非您根據ID刪除 - 在這種情況下,您已經知道它。
請顯示SP的代碼 - 否則將無法幫助您(除了猜測可能需要一段時間)。 – Hogan
SCOPE_IDENTITY()用於獲取表中最後創建/插入的ID。它不會給你最後刪除的ID。 –