2008-08-11 7 views
5

SQL Serverで相互に関係するテーブルのグループを削除する簡単な方法はありますか?理想的には、グループ全体がプロセスの終わりまでに終了することを知っているので、彼らがどの順序でドロップされているか心配する必要はありません。SQL Serverでテーブルのグループを削除する

答えて

2

愚かな音が出る危険がありますが、SQL Serverが削除/カスケード構文をサポートしているとは思われません。私はカスケード削除(http://msdn.microsoft.com/en-us/library/ms152507.aspx)を行う削除ルールを設定することができると思うが、私が知っている限り、SQL Serverのトリックはドロップする各テーブルに対して一度だけドロップクエリを実行することです。これは、あなたがDatabase Journalで見つけることができますsp___drop___constraintsスクリプトが必要です

0

私はこれをテストするために、SQL Serverへのアクセスを持っていますが、方法についてはありません:

DROP TABLE IF EXISTS table1, table2, table3 CASCADE; 
0

デレクのアプローチが動作するかどうか、私は、よく分かりません。あなたはまだそれを最良の答えとしてマークしていません。

もしそうでなければ:SQL Server 2005ではそれは可能でしょう。
彼らは例外(私はまだ使用していない)を導入しました。だから、テーブルをドロップし、例外が発生した場合はそれをキャッチし、次のテーブルがすべて消えるまで試してみてください。
テンポラリテーブルにテーブルのリストを格納しておきたい場合は、テンポラリテーブルをトラバースするためにカーソルを使用できます。

0

SQL Server内でのみ機能するソリューションはかなりシンプルになりますが、私はApacheのddlutilsを使用して終了しました。

@Derek Park、私はそこにコンマを置くことができないことを知っていたので、それは便利ですが、期待通りには動作しません。ダミーのIF EXISTSもCASCADEもSQL Serverに認識されているようですが、drop table X, Y, Zは、指定された順序で削除する必要がある場合にのみ動作します。

また、ドロップテーブルの構文について説明しているhttp://msdn.microsoft.com/en-us/library/ms173790.aspxも参照してください。

0

テーブルを任意の順序で削除しないようにするのは、テーブル間の外部キーの依存関係です。だから始める前にFKを取り除く。 INFORMATION_SCHEMAシステムビューを使用する

  1. 、すべての外部キーのリストを取得し、これらの表のいずれかに関連
  2. ドロップは、これらの外部キー
  3. のそれぞれ今、あなたが使用して、テーブルのすべてをドロップすることができるはずですあなたが望む任意の順序。
1

異なるアプローチがあります。最初に制約を取り除き、次に単一のショットでテーブルを削除します。

つまり、すべての制約に対してDROP CONSTRAINTを、次に各テーブルにDROP TABLEを指定します。この時点で実行の順序は問題ではありません。

1

: - 明らかに - この

sp_MSforeachtable @command1="print 'disabling constraints: ?'", @command2="sp_drop_constraints @tablename=?" 
GO 
sp_MSforeachtable @command1="print 'dropping: ?'", @command2="DROP TABLE ?" 
GO 

NOTEをあなたはとても気をつけて、データベース内のすべての表をドロップすることを意図している場合

関連する問題