我有一个包含 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 有一篇关于禁用/启用触发器和外键的文章: