1つのテーブルから同じ「アーカイブ」テーブルに1歳の行を移動するクエリがあります。削除クエリから不良行をブロックするには
無効な日付がdateprocessed
列(行が1年以上経過しているかどうかを評価するために使用される)に入力され、クエリのエラーが出力されることがあります。私は本質的に、悪い行を「スクリーニング」したい、つまりwhere not isdate(dateprocessed)
が1と等しくないようにして、クエリがそれらをアーカイブしようとしないようにする。
私はこれを行う方法についていくつかのアイデアを持っていますが、可能な限り単純な方法でこれをしたいと考えています。私がストアドプロシージャ内の一時テーブルに良いデータを選択した場合、内部テーブルとライブテーブルを結合し、ライブ出力からアーカイブを削除して実行します - それは基礎となるライブテーブルまたは新しい結合テーブルから削除されますか?
これを行うより良い方法はありますか?助けてくれてありがとう。私は.NETプログラマでDBAを使っていますが、これを正しく実行したいと考えています。
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)
なぜあなたのデザインを修正せずにdatetimeフィールドを使用すると、datetimeフィールドに無効な日付が格納されていないのでしょうか。 – HLGEM
4つのステップが必要です:コピー、処理、アーカイブ、削除 –