Visual Studio 2019数据库架构比较忽略外键名称



这一切都与SQL Server有关。

Visual Studio 2019数据库架构比较在比较数据库项目(源(和实际数据库(目标(之间的架构时忽略外键名(键的定义相同(。不仅仅是大小写,外键名称完全不同,但没有检测到差异。

我浏览了所有可用的模式比较选项,没有发现任何可以忽略外键名称差异的内容。

事情就是这样吗?还是我错过了一些选择?

SSDT的几个最新版本忽略了系统命名约束的名称,并且AFAIK是不可配置的。假设您的数据库项目有一个表定义,如下所示:

CREATE TABLE [dbo].[Lookups] (
[Id]         INT          IDENTITY (1, 1) NOT NULL,
[LookupType] VARCHAR (50) NOT NULL,
[Value]      [sysname]    NOT NULL,
[IsActive]   BIT          DEFAULT ((1)) NOT NULL,
PRIMARY KEY CLUSTERED ([Id] ASC),
CONSTRAINT [UQ_Lookups_NK] UNIQUE NONCLUSTERED ([LookupType] ASC, [Value] ASC)
);

如您所见,该表有2个未命名的约束(PK和IsActive列上的默认约束(,以及一个明确指定名称的唯一键。现在,如果您查看元数据,对于密钥,它将是

select c.name, c.type_desc, c.is_system_named
from sys.key_constraints c
where c.parent_object_id = object_id('dbo.Lookups');

当然,它们都有名称,但有些会在创建表/约束时由SQL Server自动命名,例如:

name                             type_desc               is_system_named
-------------------------------- ----------------------- ---------------
PK__Lookups__3214EC076C07A41D    PRIMARY_KEY_CONSTRAINT  1
UQ_Lookups_NK                    UNIQUE_CONSTRAINT       0
-- This row actually comes from sys.default_constraints
DF__Lookups__IsActiv__24927208   DEFAULT_CONSTRAINT      1

注意is_system_named列,它告诉SSDT架构比较应忽略哪些约束的名称。如果为PK或默认设置了显式名称,则在比较过程中会突出显示这些差异。但是,如果约束在项目中未命名,并且数据库中有is_system_named = 1,则其自动生成的名称将被忽略。

相关内容

  • 没有找到相关文章

最新更新