2

N 個の最も古いエントリを削除する方法。私はSybaseに限定されています。数値 X を受け入れ、X 個の最新エントリのみをテーブルに残すストアド プロシージャを作成する必要があります。

例: ID が自動的にインクリメントされるとします。小さいほど、このエントリは古いです。

ID  Text
=========
1   ASD
2   DSA
3   HJK
4   OIU

このように実行される手順が必要です。

execute CleanUp 2

そして結果は

ID  Text
=========
3   HJK
4   OIU
4

4 に答える 4

3

注: SQL Server の構文ですが、動作するはずです

Delete from TableName where ID in 
    (select top N ID from TableName order by ID )

N をパラメーターにしたい場合は、ステートメント文字列を作成して実行する必要があります

declare @query varchar(4000)
set @query = 'Delete from TableName where ID in '
set @query = @query + '(select top ' + @N + ' ID from TableName order by ID )'
exec sp_executesql @query
于 2009-04-28T12:33:17.143 に答える
1

最も単純なソリューションであるため、Eduardo のオプションが最も気に入っていますが、Sergej が非常に遅いと述べているため、別のソリューションを次に示します。

次の処理を行うストアド プロシージャを作成します。

  1. 元のテーブルと同じ構造の一時テーブルを作成します。
  2. 上位 N 行を一時テーブルに挿入します。
  3. 元のテーブルを切り捨てます。
  4. 行を一時テーブルから元のテーブルにコピーします。

一般に、特にテーブルに多数の行がある場合、これははるかに高速になります。

于 2009-04-29T13:03:09.950 に答える
0

id にクラスター化インデックスがある場合は、delete topクエリを実行しても安全です。

delete top 2 from TableName;
于 2009-07-07T07:02:47.943 に答える