为 sql server 数据库中的键、约束生成 drop-create sql 脚本

Posted

技术标签:

【中文标题】为 sql server 数据库中的键、约束生成 drop-create sql 脚本【英文标题】:Generate drop- create sql scripts for keys, constraints in sql server database 【发布时间】:2017-02-24 09:52:07 【问题描述】:

我需要为 SQL 服务器数据库中的所有键、约束生成删除和创建脚本。本练习是为目标环境中的数据库生成升级脚本。我有脚本,但它失败了,因为我需要找到数据库对象的正确顺序,例如父表级别、子表级别才能创建它们。 例如,要创建/删除索引,基本上我使用以下查询捕获索引

'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'

让我们知道如何包含索引的顺序/级别。同样需要在生成脚本时确定primary,foreign,constraints。

你能告诉我什么是捕捉这个的正确方法吗?

【问题讨论】:

How can I automate the "generate scripts" task in SQL Server Management Studio 2008?的可能重复 谢谢,但这些是为新数据库创建脚本,我需要附加 ifnot exists 并删除并专门为目标环境的数据库升级创建脚本 见dba.stackexchange.com/a/24842/44324和***.com/a/31191116/2224701 【参考方案1】:

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

【讨论】:

以上是关于为 sql server 数据库中的键、约束生成 drop-create sql 脚本的主要内容,如果未能解决你的问题,请参考以下文章

SQL Server中如何不允许列重复?

SQL Server 管理对象 (SMO) 的默认约束不一致

3 - SQL Server 2008 之 使用SQL语句删除约束条件

SQL Server中的六种约束:主键约束,外键约束,唯一约束,非空约束,检查约束,默认约束

SQL server约束

为 mapreduce 中的键生成多个输出记录