2014-12-19 56 views
1

我有一个存储过程(下面),它将读取要处理的下一行,将行状态设置为1(正在处理),并返回GUID标识行。这个程序是否达到目标?有没有更好的办法?存储过程获取下一条记录并更新行的状态

CREATE PROCEDURE [PSR].[uspGetNextAssessmentEvent] 
AS 

SET NOCOUNT ON; 
BEGIN TRAN T1; 

    WITH T AS 
    (
    SELECT TOP (1) TransactionGuid,ItemStatus 
    FROM [PSR].[PersonAssessmentEventStore] 
     WHERE ItemStatus=0 
     ORDER BY CreateDttm 
    ) 
    UPDATE T 
    SET ItemStatus = 1 
    OUTPUT INSERTED.TransactionGuid 

COMMIT TRAN T1; 

GO 

回答

0

这段代码很好。 OUTPUT对此很有帮助。

+0

感谢您的反馈意见。使用CTE有什么特别的好处吗? – user2250619 2014-12-19 17:18:06

+0

UPDATE不支持ORDER BY,因此要获取第一行,您需要一个子查询。 CTE提供了更好的子查询体验。 – 2014-12-19 22:48:42

相关问题