2009-07-03 8 views
1

私はSQL Server 2005で、私たちのようなもの行うことができます知っている:TOP n結果をSQL 2000で削除するには?

を考慮すると、SQL2Kで同じことを行うには、クエリ何ができるかX = 1

TBXのトップ10をDELETEを主キーは2つのFK列で構成されていますか?

答えて

5

ハック、しかし:

;-pけれども、私は、自分自身をこれを書いていないでしょう

SET ROWCOUNT 10 
DELETE FROM tbX where X = 1 
SET ROWCOUNT 0 

(私は私の手を洗うようにオフだ...)

+0

私はこのハッキングをカプラ時間に使ってきました。今、私は手を洗っています... –

+1

私の以前の仕事はこの報告フレームワークを持っていましたが、set rowcountを使ってすべてのレポートを50,000行に制限する賢い考えがありました。大量のデータにチャレンジする必要がある場合は、結果が間違ってしまうことになります。 –

+0

はい - 非常に厳密にスコープされ理解されている操作に制限しないと非常に危険です。実際、私はただ「非常に危険な」ところで止めることができます。 –

0
DELETE 
FROM tbX 
WHERE id IN (SELECT TOP 10 id FROM tbX WHERE X = 1) 

まず、外部キーレコードを削除する必要があります。

+0

私は 'ID' を持っていません。主キーは、2つのFK列で構成されています。 –

0

複合キーを扱う場合は、このように削除します。

delete from tblX 
from tblx as aa 
join 
(
    select top 10 * from tblX 
) as bb 
on 
    aa.key1 = bb.key1 
    and 
    aa.key2 = bb.key2 
0

これはSQLでは動作しませんが、行に沿った何かが動作する可能性があります。

DELETE t 
from tbx t 
join (
    select top 10 k1,k2 from tbx 
) as t2 on t.k1 = t2.k1 and t.k2 = t2.k2 

注:サブクエリでTOPが機能しない場合は、一時表に項目を挿入して参加してください。

1

これはSQL2012で私の作品:

;with window as (select top (12) * from PromoterQueue order by LogId) 
delete from window 
関連する問題