4

テーブルから行を削除するストアド プロシージャがあります。

削除された行のIDを返す方法はありますか? (SCOPE_IDENTITY()) を挿入してそれを行う方法があることは知っていますが、削除には機能しないようです。

コード:

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

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

3 に答える 3

7

はい、できます。ここから:-

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
于 2013-10-17T18:19:34.470 に答える
2

ID を取得するための SELECT と、実際に削除を実行するための DELETE の 2 つのコマンドを実行する必要があります。

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

ID に基づいて削除しない限り、その場合は既にそれを知っています。

于 2013-10-17T18:20:31.670 に答える