データベースから大量のデータを削除する方法やプロセスをスピードアップする方法については多くの情報がありますが、それを避ける方法はありません。たとえばテーブルから大量の行を削除しないようにする
私は10k行のテーブルを持っています(列が何であれ)。代わりに、間違いの誰かによって書き込み
DELETE from tableName WHERE ID=123
アプリケーションを書くの はどこ(テーブルからすべての行を削除することになります声明
DELETE from tableName
私は このANは表示されません忘れ不可能なシナリオ)
WHERE句を忘れて行を更新する場合も同様ですWindowsアプリケーションを書きながらpdate(あなたも最初に気付くことはありません)テーブルからすべての行
UPDATE tableName set Attribute='new_Value'
は以前のものは、実際に
( 幸いにもそれが唯一のテストデータベースだった)私に起こりました私の質問は、このようなことをどうやって避けるのですか?
いくつかのアイデア:
1)アップデートを提供し、SA以外の者に権限を削除し、単一の行
2を更新するために、SQLストアド・プロシージャ/ファンクションを書かないでください)と行の数を確認してください更新/削除前のトリガー
これは通常、技術的手段では解決されません。これで1回または2回、あなたの指が燃えた後は、より注意深くなる傾向があります。ある種の習慣(例えば、 'SELECT'を最初に書いた後、大量のクエリが書かれテストされたり暗黙的なトランザクションモードが使用されると、それらをより破壊的な形に変換するような傾向があります。バックアップの重要性に心を注ぐ*と回復計画を持つ*。 –
うーん..私はあなたのポイントを取得していません。 '' 'DELETE FROM tablename'''を書いているのであれば、すべての行を削除してください。これが間違っていたかどうかをどうやって調べるべきですか?あなたができることは、あなたの声明の前に '' 'BEGIN TRAN''を書いてください。その後、声明を出して結果を確認してください。それらがOKであれば、トランザクションまたはロールバックをコミットします。また、「忘れた」WHERE句の場合に警告する、利用可能なSSMSの拡張機能(例えば、Red Gate Tools)もあります。 –
はい、あなたは私の質問をしていないことがわかります。さて、あなたはデータベースを開発し、行はすでにデータベースに存在しているということです。誰かがデータベース内で対話するアプリケーションを作成し、選択された行をリスト(データベースにも含まれています)から削除するインタラクションを作成したいが、where句を忘れ、すべてのデータを削除するそのテーブルから。アイデアは、このような状況を分離するアイデアがあるということです(例えば、削除するものについて言及するストアドプロシージャを使用するなど) – berthos