4

データベース テーブルから古いデータを消去する必要があります。以下に、app_statusapp_personal_detailsの 2 つのテーブルを示します。

ここに画像の説明を入力

今日の日付から 12 か月以上作成されたapp_statusテーブルからすべてのレコード (アプリケーション) を選択する次のクエリがあります。

select status_id  
from dbo.app_status  
where submission_date <= dateadd(month, -12, getdate()) order by 1

次に、上記の取得した status_id のリストに application_id が存在するapp_personal_detailsテーブルからすべてのレコードを削除します。

これが理にかなっていることを願っています。両方のテーブルからデータを削除する簡単な方法を知りたいです。

ご協力いただきありがとうございます。

4

4 に答える 4

4
delete from app_personal_details
where application_id in (
    select status_id   
    from dbo.app_status   
    where submission_date <= dateadd(month, -12, getdate())
)
于 2012-10-22T13:53:37.660 に答える
2

それを行い、両方のテーブルで一貫した削除を取得する 1 つの方法は次のようになります。

Select status_id  
Into #to_delete
From dbo.app_status  
Where submission_date <= dateadd(month, -12, getdate())

Create Unique Clustered Index PK_X On #to_delete (status_id)

Delete 
  app_personal_details
From
  app_personal_details apd Inner Join
  #to_delete d On apd.application_id = d.status_id

Delete 
  app_status
From 
  app_status a Inner Join
  #to_delete d On a.status_id = d.status_id

output 句を使用するか、2 つのテーブル間に削除カスケードがある場合は、より少ないステートメントで実行できる場合があります。

于 2012-10-22T14:08:59.327 に答える
2

副選択を使用できます。

DELETE FROM app_personal_details
WHERE application_id IN
(
    SELECT status_id  
    FROM dbo.app_status  
    WHERE submission_date <= DATEADD(month, -12, GETDATE())
)
于 2012-10-22T13:53:51.243 に答える
0

テーブルが大きい場合は、トランザクションログが指数関数的に増大しないように、バッチで削除することをお勧めします。SQLサーバーはそれをより高速に処理します。

DELETE TOP(N)...または特定の日付範囲を削除することにより、削除する行を制限できます。

于 2012-10-23T09:29:03.633 に答える