T-SQL脚本复制所有表约束
发布时间:2020-12-12 06:21:57 所属栏目:MsSql教程 来源:网络整理
导读:我在本地数据库上创建了许多表,并将它们移动到生产数据库. 现在我正在调整数据库并在我的本地数据库表上创建了许多约束,例如PK,FK,默认值,索引等. 现在我想只将这些约束复制到生产数据库.有办法吗? 请注意,我的生产数据库表已经填充了一些数据.所以我不能放
我在本地数据库上创建了许多表,并将它们移动到生产数据库.
现在我正在调整数据库并在我的本地数据库表上创建了许多约束,例如PK,FK,默认值,索引等. 现在我想只将这些约束复制到生产数据库.有办法吗? 请注意,我的生产数据库表已经填充了一些数据.所以我不能放弃并重新创建它们. 解决方法如果您不想购买任何工具(完全物有所值,BTW),您始终可以查询系统目录视图,并从中提取信息以创建可在新数据库上执行的脚本.例如,在例如默认约束,此查询显示数据库中所有默认约束的列表: SELECT dc.name 'Constraint Name',OBJECT_NAME(parent_object_id) 'Table Name',c.name 'Column Name',definition FROM sys.default_constraints dc INNER JOIN sys.columns c ON dc.parent_object_id = c.object_id AND dc.parent_column_id = c.column_id ORDER BY OBJECT_NAME(parent_object_id),c.name 基于此,您当然可以创建一个查询,该查询将发出T-SQL语句以在目标服务器上重新创建这些默认约束: SELECT 'ALTER TABLE ' + OBJECT_SCHEMA_NAME(dc.parent_object_id) + '.' + OBJECT_NAME(dc.parent_object_id) + ' ADD CONSTRAINT ' + dc.name + ' DEFAULT(' + definition + ') FOR ' + c.name FROM sys.default_constraints dc INNER JOIN sys.columns c ON dc.parent_object_id = c.object_id AND dc.parent_column_id = c.column_id 你会得到这样的东西(对于AdventureWorks示例数据库): ALTER TABLE dbo.Store ADD CONSTRAINT DF_Store_rowguid DEFAULT((newid())) FOR rowguid ALTER TABLE dbo.Store ADD CONSTRAINT DF_Store_ModifiedDate DEFAULT((getdate())) FOR ModifiedDate ALTER TABLE dbo.ProductPhoto ADD CONSTRAINT DF_ProductPhoto_ModifiedDate DEFAULT((getdate())) FOR ModifiedDate ALTER TABLE dbo.ProductProductPhoto ADD CONSTRAINT DF_ProductProductPhoto_Primary DEFAULT(((0))) FOR Primary ALTER TABLE dbo.ProductProductPhoto ADD CONSTRAINT DF_ProductProductPhoto_ModifiedDate DEFAULT((getdate())) FOR ModifiedDate ALTER TABLE dbo.StoreContact ADD CONSTRAINT DF_StoreContact_rowguid DEFAULT((newid())) FOR rowguid ALTER TABLE dbo.StoreContact ADD CONSTRAINT DF_StoreContact_ModifiedDate DEFAULT((getdate())) FOR ModifiedDate ALTER TABLE dbo.Address ADD CONSTRAINT DF_Address_rowguid DEFAULT((newid())) FOR rowguid 当然,您可以根据自己的喜好调整生成的T-SQL输出 – 但基本上,将查询中的结果复制并粘贴到新数据库中,然后就可以了. 当然,外键关系(sys.foreign_keys),检查约束(sys.check_constraints),索引(sys.indexes和sys.index_columns)等等有类似的系统目录视图. 这有点工作 – 但它可以在你自己的时间完成,你将在这个过程中学到很多关于SQL Server的知识. 所以这是一个传统的“制造或购买”决定:-) 渣 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |