簡體   English   中英

Visual Studio 2019 數據庫架構比較忽略外鍵名稱

[英]Visual Studio 2019 Database Schema Compare ignores foreign key names

這都與 SQL 服務器有關。

在比較數據庫項目(源)和實際數據庫(目標)之間的架構時,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 服務器自動命名,例如:

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 ,則其自動生成的名稱將被忽略。

我很欣賞羅傑沃爾夫的回答。

但是今天我再次嘗試了模式比較,它檢測到了這種變化。 那好吧...

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM