[英]Visual Studio 2013 Schema Compare/Publish ignores column order in definition of foreign key constraint
[英]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.