我試圖創建一個存儲過程,它返回所有更新的記錄。返回更新記錄的SQL Server存儲過程
我的更新查詢是這樣的:
UPDATE BatchItems
SET [Status] = 'Processing'
WHERE [Status] = 'Queued'
我只是不知道如何回報那些特定的記錄。
我試圖創建一個存儲過程,它返回所有更新的記錄。返回更新記錄的SQL Server存儲過程
我的更新查詢是這樣的:
UPDATE BatchItems
SET [Status] = 'Processing'
WHERE [Status] = 'Queued'
我只是不知道如何回報那些特定的記錄。
您可以使用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
@marc_s它可以完美地與INSERT/UPDATE/DELETE配合使用,請參閱更新 –
如果您使用的是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'
您可以選擇記錄在運行更新之前?實際上,它會在更新之前爲您提供相同的記錄。即從狀態'排隊'並運行更新的BatchItems中選擇*。相同的最終結果 – kd7
我不想這樣做,因爲記錄可能已插入到select和update之間。 –
好了,抱歉不知道有可能的併發問題 – kd7