1

300 個のテーブルを持つデータベースがあります。テーブルをクリーンアップする必要があるため、すべての制約、トリガー、主キー、および外部キーを削除するスクリプトを作成しました。

スクリプト生成機能を使用してスクリプトを作成できましたが、CREATE ステートメント内に主キーしか含まれていません。

キーを削除し、データベースをクリアし、新しいデータを挿入し、すべてのキー、制約などを復元できるように、それらを ALTER TABLE ステートメントとして取得する必要があります。

4

2 に答える 2

1

ここでは、Powershell と SMO が友達になります。

$option_drop = new-object Microsoft.SqlServer.Management.Smo.ScriptingOptions;
$option_drop.ScriptDrops = $true;

"" > drop_primary_keys.sql
"" > create_primary_keys.sql

$server = new-object Microsoft.SqlServer.Management.Smo.Server ".";
$db = $server.Databases['AdventureWorks'];
foreach ($table in $db.Tables) {
    foreach ($index in $table.Indexes) {
        if ($index.IndexKeyType -eq "DriPrimaryKey") {
            $index.Script( $option_drop ) >> drop_primary_keys.sql
            $index.Script() >> create_primary_keys.sql
        }
    }
}

ここにいくつかのメモがあります:

  • このスクリプトを実行すると、「drop_primary_keys.sql」および「create_primary_keys.sql」という名前の既存のファイルが削除されるため、注意して進めてください。
  • あなたはすでにそれを行う方法があると言ったので、スクリプトは外部キーを考慮しません。
  • 必要に応じて ScriptingOptions オブジェクトを微調整する必要がある場合があります。具体的には、作成時にデフォルトを使用しているため、別の ScriptingOptions オブジェクトを作成し、適切と思われるオプションを設定する必要がある場合があります。

それ以外は、よく狩ります。

于 2012-03-06T16:41:53.400 に答える
0

msdn には、トリガーと外部キーの無効化/有効化に関する記事があります。

http://msdn.microsoft.com/en-us/magazine/cc163442.aspx

于 2012-03-05T20:19:31.147 に答える