sql - 返回 UPDATE 结果的存储过程

标签 sql sql-server stored-procedures

我有一个表,用于存储递增的数字 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/

相关文章:

不使用 HAVING 的 SQL 查询过滤 COUNT

sql - 如何使用 WHERE x IN 子句为 PreparedStatement 编写 SQL?

entity-framework - Entity Framework 仅与存储过程

c# - 我需要将 XML 节点传递给两个不同 Excel 工作表的存储过程

javascript - 插入和选择时如何获取查询结果的数量?

mysql - YA MySQL Error #1064 in CALL

php - 我对 mysql 数据库的数据库设计模式正确吗?

PHP/MySQL : UPDATE multiples values with multiples WHERE

sql - 如何使用 IN 子句查询大量单词

sql-server - SQL Server 确定表列的物理大小