如何配置SSDT在部署时忽略自动生成的约束名称?
问题:SSDT部署时忽略自动生成的约束名称是否可行?
现有数据库中的表定义如下:
CREATE TABLE [dbo].[MyTable] ( [TradeBlockId] [bigint] NOT NULL, ... [LastUpdatedDate] [datetime] NULL, CONSTRAINT [PK__MyTableO__78D4AEA3FD2A1608] PRIMARY KEY CLUSTERED ([TradeBlockId] ASC, [TradeAllocationId] ASC) ) GO ALTER TABLE [dbo].[MyTable] ADD CONSTRAINT [DF__MyTableOv__LastU__623C3574] DEFAULT (GETDATE()) FOR [LastUpdatedDate]
但项目中的表定义未指定约束名称,仅使用内联语法:
CREATE TABLE [dbo].[MyTable] ( [TradeBlockId] BIGINT NOT NULL, ... [LastUpdatedDate] DATETIME DEFAULT (getdate()) NULL, PRIMARY KEY CLUSTERED ([TradeBlockId] ASC, [TradeAllocationId] ASC) );
希望SSDT在部署时忽略这些自动生成的约束名称差异,是否存在对应的配置选项?
解决方案
- SSDT没有直接的“忽略系统生成名称”配置选项,但可以通过两种方式实现需求:
- 在项目中显式匹配约束名称
把项目里的表定义修改为和现有数据库一致的约束名称,让SSDT检测不到差异。示例:CREATE TABLE [dbo].[MyTable] ( [TradeBlockId] BIGINT NOT NULL, ... [LastUpdatedDate] DATETIME NULL, CONSTRAINT [PK__MyTableO__78D4AEA3FD2A1608] PRIMARY KEY CLUSTERED ([TradeBlockId] ASC, [TradeAllocationId] ASC), CONSTRAINT [DF__MyTableOv__LastU__623C3574] DEFAULT (GETDATE()) FOR [LastUpdatedDate] ); - 自定义部署贡献者过滤差异
编写.NET代码实现IDeploymentContributor接口,创建自定义部署贡献者组件,在SSDT生成部署脚本的环节,自动过滤掉约束名称相关的变更操作。这种方式无需修改表定义,但需要一定的开发工作量。
- 在项目中显式匹配约束名称
- 此外,SSDT的高级部署设置里有“忽略列顺序”“忽略权限”等选项,但这些不直接针对约束名称,无法解决当前问题。
内容的提问来源于stack exchange,提问作者Eric Mamet
相关产品推荐
相关产品推荐

