2014-12-19 57 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

相關問題