300 個のテーブルを持つデータベースがあります。テーブルをクリーンアップする必要があるため、すべての制約、トリガー、主キー、および外部キーを削除するスクリプトを作成しました。
スクリプト生成機能を使用してスクリプトを作成できましたが、CREATE ステートメント内に主キーしか含まれていません。
キーを削除し、データベースをクリアし、新しいデータを挿入し、すべてのキー、制約などを復元できるように、それらを ALTER TABLE ステートメントとして取得する必要があります。
300 個のテーブルを持つデータベースがあります。テーブルをクリーンアップする必要があるため、すべての制約、トリガー、主キー、および外部キーを削除するスクリプトを作成しました。
スクリプト生成機能を使用してスクリプトを作成できましたが、CREATE ステートメント内に主キーしか含まれていません。
キーを削除し、データベースをクリアし、新しいデータを挿入し、すべてのキー、制約などを復元できるように、それらを ALTER TABLE ステートメントとして取得する必要があります。
ここでは、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
}
}
}
ここにいくつかのメモがあります:
それ以外は、よく狩ります。
msdn には、トリガーと外部キーの無効化/有効化に関する記事があります。