2017-01-01 3 views
2

で削除されたレコードの値を使用して、私はあなたがお互いにそれらを実行することはできませんだと思う。このSQL Serverの

select * from Flat 
WHERE Flat.nu in (delete top (1) from temp output deleted.nu) 
+0

なぜそれが必要ですか?トリガーとカスケード削除を使用できるとき;)。 –

+0

無効なFKを探したいだけなら、LEFT JOINを使い、 'null'結果をフィルタリングするだけです。 –

+0

shA.t大きなクエリの一部 –

答えて

3

として葯クエリでそのIdで記録し、検索を削除する必要があります。

私は(一時的なテーブル)を使用することをお勧めします:tempIds(id int)

delete top(1) from temp 
output deleted.id into tempIds; 

注:これは、最初の行を削除するには、CTEを使用することをお勧めします は、このようなoutput句を使用します。

次に、tempIdsテーブルを照会し、その後には、tempIdsをクリアします。

+0

最善の中間テーブルを一時テーブルにする。 –

+0

@TT。 [両方とも提案されている](https://blogs.msdn.microsoft.com/sqltips/2005/06/13/output-clause-in-insertupdatedelete-statements/);)。 –

+0

Mkay、私はこのシナリオでは通常のテーブルを使用するのは大好きではありません。 –

1

このようにお試しください。お手伝いをすることがあります。

DECLARE @ID_CAPTURE TABLE (ID Int) 
DELETE TOP(1) FROM TEMP 
OUTPUT deleted.Nu into @ID_CAPTURE 

SELECT * FROM FLAT WHERE NU IN (SELECT * FROM @ID_CAPTURE) 

上記のスニペットは複数のレコードの場合にも機能します。