返回更新结果的存储过程

And*_*son 6 sql sql-server stored-procedures

我有一个表,用于存储递增的数字 ID(INT 类型)。它包含一行。使用查询增加 ID:

UPDATE TOP(1) MyTable
WITH(TABLOCKX)
SET NextID = NextID + 1
Run Code Online (Sandbox Code Playgroud)

我想将它移到一个存储过程中,该过程返回 NextID 列中递增之前的值,但我不确定如何使用 OUTPUT 参数执行此操作。任何帮助,将不胜感激。

KM.*_*KM. 4

对于 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
Run Code Online (Sandbox Code Playgroud)

结果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
Run Code Online (Sandbox Code Playgroud)

输出:

(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)
Run Code Online (Sandbox Code Playgroud)