我有一个表,用于存储递增的数字 ID(INT 类型)。它包含一行。使用查询递增 ID:
UPDATE TOP(1) MyTable
WITH(TABLOCKX)
SET NextID = NextID + 1
我想将其移动到一个存储过程中,该存储过程返回 NextID 列中在增加之前的值,但我不确定如何使用 OUTPUT 参数来执行此操作。任何帮助将不胜感激。
最佳答案
对于 SQL Server 2005+,请尝试:
CREATE PROCEDURE dbo.Get_New_My_Table_ID
@current_id INT = NULL OUTPUT -- Declared OUTPUT parameter
AS
BEGIN TRANSACTION
UPDATE TOP(1) MyTable WITH(TABLOCKX)
SET NextID = NextID + 1
OUTPUT DELETED.NextID
COMMIT TRANSACTION
RETURN 0
GO
OUTPUT
的结果不需要进入实际的表,它可以是一个结果集。
测试一下:
declare @MyTable table (NextID int)
INSERT INTO @MyTable VALUES (1234)
SELECT 'BEFORE',* FROM @MyTable
PRINT '------------<<<<UPDATE>>>>---------'
UPDATE TOP(1) @MyTable
SET NextID = NextID + 1
OUTPUT DELETED.NextID
PRINT '------------<<<<UPDATE>>>>---------'
SELECT 'AFTER',* FROM @MyTable
输出:
(1 row(s) affected)
NextID
------ -----------
BEFORE 1234
(1 row(s) affected)
------------<<<<UPDATE>>>>---------
NextID
-----------
1234
(1 row(s) affected)
------------<<<<UPDATE>>>>---------
NextID
----- -----------
AFTER 1235
(1 row(s) affected)
关于sql - 返回 UPDATE 结果的存储过程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3102828/