生成删除-为sql server数据库中的键和约束创建sql脚本

生成删除-为sql server数据库中的键和约束创建sql脚本,sql,sql-server,sql-server-2008,generate-scripts,Sql,Sql Server,Sql Server 2008,Generate Scripts,我需要为SQL server数据库中的所有键和约束生成拖放和创建脚本。本练习旨在为目标环境中的数据库生成升级脚本。我有脚本,但它失败了,因为我需要找到数据库对象的正确顺序,如父表级、子表级,以便将它们装箱。 例如,为了装箱/放置索引,基本上我使用下面的查询捕获索引 'SELECT object_name(si.object_id) ,si.object_id ,si.NAME ,si.index_id FROM sys.indexes si LEFT JOIN information_schem

我需要为SQL server数据库中的所有键和约束生成拖放和创建脚本。本练习旨在为目标环境中的数据库生成升级脚本。我有脚本,但它失败了,因为我需要找到数据库对象的正确顺序,如父表级、子表级,以便将它们装箱。 例如,为了装箱/放置索引,基本上我使用下面的查询捕获索引

'SELECT object_name(si.object_id)
,si.object_id
,si.NAME
,si.index_id
FROM sys.indexes si
LEFT JOIN information_schema.table_constraints tc ON si.NAME = tc.constraint_name AND object_name(si.object_id) = tc.table_name
WHERE objectproperty(si.object_id, 'IsUserTable') = 1    
ORDER BY object_name(si.object_id)
,si.index_id'
让我们知道如何包含索引的顺序/级别。同样,在生成脚本时需要确保主约束、外部约束和约束


你能告诉我捕捉这个的正确方法吗。

如果你有所有的FK等,那么你可以使用sys.dependencies来找出正确的顺序。一个懒惰的方法是继续运行脚本,它们最终都会成功。例如,如果创建表1依赖于表2,那么第一次运行表2时会创建,第二次运行表1时会创建。很容易编写脚本…

可能重复感谢,但这些是为新数据库创建脚本,如果不存在,我需要附加脚本,还需要删除并创建专门用于目标环境的数据库升级的脚本请参见和