特定の日数を経過したすべてのレコードを削除するには、SQL クエリ (SQL Server の sqlcmd.exe によって実行される .sql ファイル) を作成する必要があります。ただし、外部キー制約を回避する方法に困惑しています。問題を説明するために、同様の関係を持つ 3 つのテーブルを示します (これは疑似コードであることに注意してください)。
CREATE TABLE runlog(
row_id int identity(1,1) NOT NULL,
run_id nvarchar(25) NULL FOREIGN KEY REFERENCES status(run_id),
master_id nvarchar(25) NULL FOREIGN KEY REFERENCES master(master_id),
)
CREATE TABLE status(
run_id nvarchar(25) NOT NULL,
master_id nvarchar(25) NULL FOREIGN KEY REFERENCES master(master_id),
status_date datetime NULL,
)
CREATE TABLE master(
master_id nvarchar(25) NOT NULL,
)
通常、削除はランログ、ステータス、マスターの順に行われますが、レコードの古さを判断するために必要なフィールドはステータス テーブルにあります。したがって、マスターテーブルの前にステータステーブルから論理的に削除することはできませんが、その逆もできません。runlog テーブルには、これを使用できます。
delete from runlog
inner join status on status.run_id = runlog.run_id
where status.status_date <= DATEADD(DAY, -30, GETDATE())
必要な master_id を選択するには、次を使用できます。
select master_id from status
where status.status_date <= DATEADD(DAY, -30, GETDATE())
次に、このリストをキャッシュする方法があれば、それを使用してステータスからリストを削除し、次にマスターからリストを削除できますが、新しいストアドプロシージャがなければ、その方法がわかりません。助言がありますか?