我想寫遞增函數返回一個更新的結果,並返回一個int的列值:在存儲過程OUTPUT DELETED條款
CREATE PROCEDURE [GetNextTagSuffix]
AS
BEGIN
UPDATE [MyTable]
SET [NextTagSuffix] = [NextTagSuffix] + 1
OUTPUT DELETED.[NextTagSuffix]
WHERE [MyTableId] = 'SpecialCase'
END
的OUTPUT子句可以輸出INTO一個表變量或臨時表,但我只需要這個單一的值,所以首先添加到表變量似乎很愚蠢。有沒有辦法將這個值直接賦值給一個變量並返回它?
使用表變量解決:
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
雖然我同意這似乎很奇怪,我建議使用一個表變量在一個臨時表。臨時表將使用tempdb,而如果沒有可用於操作的內存,表變量將僅使用tempdb - 因此表變量更可能更快。要麼緩解對錶的第二次讀取以獲取值...順便說一下,從SQL Server 2012開始,您可以使用序列來處理增量。 –
如果你只是想返回一個值,那麼你可以在你的存儲過程中使用輸出變量 – praveen
謝謝@OMGPonies--不幸的是我現在暫時停留在2005年。 –