0

私はSQLの知識が限られているので、私の考えが正しいかどうか誰かに知らせてもらえますか. 時間の経過とともにゆっくりといっぱいになるテーブルがあります。テーブルの最初のレコードから特定のポイントまでのレコードを削除する必要があります。主キーは GUID に基づいているため、GUID に基づいて並べ替えることができないため、簡単に削除できないことを認識しています (これは前のスレッドで説明されています)。カーソルを使用してテーブルの最初のレコードを確認し、特定の GUID に到達するまでレコードを削除しながらテーブルを進めることはできますか? 私が抱えている問題は、GUID で定義されたレコードの前にテーブルに配置されたすべてのレコードを削除する必要があることですが、レコードのデータが事前定義された日付よりも古い場合にのみ削除できます。私はこれがすべて少し厄介であることを知っていますが、私は解決策を後付けする必要があるので、今のところは厄介な解決策で十分です.

MS SQL Server 2008 を使用しています

4

2 に答える 2

4

まず第一に、どんな種類の SQL クエリを操作する場合でも、本当にカーソルを使用する必要があるかどうか疑問に思う必要があります。

SQL はセットベースであるため、非常に効率的で、データの「セット」を処理できます。

まず最初に、「最初のレコード」の定義は何ですか? レコードが別のレコードの前にあるかどうかをどのように判断しますか?

テーブルに「datetime」列が定義されていることを理解していますか?

テーブルに保持したいレコードの「日時」を特定することはできますか?

もしそうなら、指定された日付よりも古いレコードが削除されないようにする WHERE 句を使用して、テーブルで単純に DELETE を実行できると思います。

于 2009-12-21T10:42:18.693 に答える
0

GUIDが、削除する範囲を見つける方法であると仮定します。

DELETE FROM TheTable WHERE DateColumn < (SELECT DateColumn FROM TheTable WHERE GuidColumn = 'GUIDGUID-GUID-GUID-GUID-GUIDGUIDGUID')
于 2009-12-21T10:59:20.497 に答える