int列の値をインクリメントして返す関数を作成しようとしています。
CREATE PROCEDURE [GetNextTagSuffix]
AS
BEGIN
UPDATE [MyTable]
SET [NextTagSuffix] = [NextTagSuffix] + 1
OUTPUT DELETED.[NextTagSuffix]
WHERE [MyTableId] = 'SpecialCase'
END
OUTPUT句はテーブル変数または一時テーブルに出力できますが、必要なのはその単一の値だけなので、最初にテーブル変数に追加するのはばかげているようです。その値を変数に直接割り当てて返す方法はありますか?
テーブル変数を使用して解決:
CREATE PROCEDURE [GetNextTagSuffix]
@TagSuffix int out
AS
BEGIN
DECLARE @tagTable TABLE
(
NextTagSuffix int
)
UPDATE [MyTable]
SET [NextTagSuffix] = [NextTagSuffix] + 1
OUTPUT DELETED.[NextTagSuffix] INTO @tagTable
WHERE [MyTableId] = 'SpecialCase'
SET @TagSuffix = (SELECT MAX(NextTagSuffix) FROM @tagTable)
RETURN @TagSuffix
END