2016-09-11 10 views
3

私はテーブルQUEUEからレコードを取得しようとしていると同じレコードを削除します。このクエリを通じて結果セットを返す方法

CREATE TABLE DBO.QUEUE 
( 
    QUEUEID INT IDENTITY(1, 1) NOT NULL PRIMARY KEY, 
    SOMEACTION VARCHAR(100) 
) 

updlock & readpastを使用して私はすでに処理されたどのようなレコードを削除することができていますが、私はこれを行う方法を、結果としても、そのレコードが必要ですか?

結果セットにQUEUEIDSOMEACTIONの両方の列が必要です。

BEGIN TRAN TRAN1 

SELECT TOP 1 @queueid = QUEUEID 
FROM DBO.QUEUE WITH (updlock, readpast) 

PRINT 'processing queueid # ' + CAST(@queueid AS VARCHAR) 

DELETE FROM DBO.QUEUE 
WHERE QUEUEID = @queueid 

COMMIT 
+0

使用しているSQLのバージョンは?ここでは取引が適切と思われます。 –

+0

Sql 2012バージョン – user584018

+1

[手動](https://msdn.microsoft.com/en-us/library/ms189835.aspx#CaptureResults)をお読みになりましたか? 'DELETE FROM DBO.QUEUE OUTPUT DELETED.QUEUEID、DELETED.SOMEACTION WHERE QUEUEID = @ queueid' – Andreas

答えて

3

あなたと@Andreasは、すでに述べたように - あなたのDELETE文でOUTPUT句を使用します。

DELETE FROM DBO.QUEUE 
OUTPUT deleted.QueueId, deleted.SomeAction 
WHERE QUEUEID = @queueid 

これは(結果セットとして)削除された値を返します。

関連する問題