1 年前の行を 1 つのテーブルから同一の「アーカイブ」テーブルに移動するクエリがあります。
無効な日付がdateprocessed
列に入力され (行が 1 年以上経過しているかどうかを評価するために使用されます)、クエリでエラーが発生することがあります。クエリがそれらをアーカイブしようとしないように、本質的に悪い行を「選別」したい-つまりwhere not isdate(dateprocessed)
、1に等しくない-。
これを行う方法についていくつかのアイデアがありますが、可能な限り最も簡単な方法でこれを行いたいと考えています。適切なデータをストアド プロシージャの一時テーブルに選択し、それをライブ テーブルと内部結合してから、ライブ出力からアーカイブへの削除を実行すると、基になるライブ テーブルまたは新しい結合テーブルから削除されますか?
これを行うより良い方法はありますか?助けてくれてありがとう。私は DBA をしている .NET プログラマーですが、これを適切に行いたいと思っています。
dateprocessed
列の値の一部が無効な場合にエラーになるクエリを次に示します。
delete from live
output deleted.* into archive
where isdate(dateprocessed) = 1
and cast (dateprocessed as datetime) < dateadd(year, -1, getdate())
and not exists (select * from archive where live.id = archive.id)