更新されたすべてのレコードを返すストアドプロシージャを作成しようとしています。更新されたレコードを返す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'
アップデートを実行する前に、レコードを選択することはできますか?実際には、更新される前に同じレコードが提供されます。私。 Statusを 'Queued'に設定したBatchItemsから*を選択し、更新を実行します。同じネット結果 – kd7
selectとupdateの間にレコードが挿入されている可能性があるので、これをやりたくありません。 –
可能であれば同時実行性の問題があるとは知らなかった – kd7