如何从现有数据库中编写主键约束的脚本

时间:2012-03-05 20:13:09

标签: sql sql-server database-administration

我有一个包含300个表的数据库。我需要清理表,所以我编写了一个脚本,它删除了所有的约束,触发器,主键和外键。

我已设法使用生成脚本功能创建脚本,但它们只在CREATE语句中包含主键。

我需要将它们作为ALTER TABLE语句,以便我可以删除键,清除数据库,插入新数据,还原所有键,约束等。

2 个答案:

答案 0 :(得分: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对象并设置您认为合适的选项。

除此之外,还有很好的狩猎。

答案 1 :(得分:0)

Msdn有一篇关于禁用/启用触发器和外键的文章:

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