2011-08-08 89 views
4

我試圖創建一個存儲過程,它返回所有更新的記錄。返回更新記錄的SQL Server存儲過程

我的更新查詢是這樣的:

UPDATE BatchItems 
SET [Status] = 'Processing' 
WHERE [Status] = 'Queued' 

我只是不知道如何回報那些特定的記錄。

+0

您可以選擇記錄在運行更新之前?實際上,它會在更新之前爲您提供相同的記錄。即從狀態'排隊'並運行更新的BatchItems中選擇*。相同的最終結果 – kd7

+0

我不想這樣做,因爲記錄可能已插入到select和update之間。 –

+0

好了,抱歉不知道有可能的併發問題 – kd7

回答

4

您可以使用OUTPUT INSERTED.[cols]來獲取語句已修改的行。

UPDATE BatchItems 
    SET [Status] = 'Processing' 
    OUTPUT INSERTED.* 
WHERE [Status] = 'Queued' 

示例;

select 'Queued  ' as status, 1 as id into #BatchItems 
insert #BatchItems values ('Queued', 2) 
insert #BatchItems values ('XXX', 3) 

UPDATE #BatchItems 
    SET [Status] = 'Processing' 
    OUTPUT INSERTED.* 
WHERE [Status] = 'Queued' 

>>status  id 
>>Processing 2 
>>Processing 1 
+0

@marc_s它可以完美地與INSERT/UPDATE/DELETE配合使用,請參閱更新 –

4

如果您使用的是SQL Server 2005或更高版本,則可以使用OUTPUT子句。

http://msdn.microsoft.com/en-us/library/ms177564(v=SQL.90).aspx

update BatchItems 
set Status = 'Processing' 
output inserted.* 
where Status = 'Queued' 
+0

+1作爲第一個識別版本問題:-) – EBarr

+0

什麼版本問題? –

+0

輸出子句僅在SQL 2k5或更高版本中受支持。 –

相關問題