Sql-Server
Visual Studio 數據工具 (SSDT) 架構比較工具似乎無法正常工作
我最近開始使用 SSDT 架構以及數據和比較工具。多年來,我一直在使用 Red Gate 的 SQL 比較和 SQL 數據比較,但我認為 VS 工具可能就足夠了,我想看看我是否可以忍受它們。在過去的幾個月裡,它們一直執行良好,但今天在比較本地數據庫和 Azure SQL 數據庫之間的架構時,我得到了一個奇怪的結果,我想為 Web 應用程序部署更改。架構比較已將若干列標記為不同,並指示它們將被刪除。實際上,添加了一個新列。但是,其他列中的任何內容都沒有改變。我勾選了“忽略列順序”框,以便不考慮列順序。
這是它的樣子:
只是顏色不對嗎?即使沒有任何變化,它是否會實際刪除 PermitLimit 列並重新創建它?我是否需要設置其他一些設置,以便這些相同的列不會被突出顯示為有差異?
模式比較 UI 有時會在面對這樣的多個更改時有點混亂。您應該使用“生成腳本”按鈕來查看在執行時將進行哪些實際更改。通常,您希望您的測試執行與您實際部署更改的方式盡可能相似。
在您的情況下,導致混淆的組合是:
- 一些列正在重新排序
- 一些預設約束正在轉換為命名約束
我可以通過創建此表並在本地部署它來重複您的問題:
CREATE TABLE dbo.TableA ( Id int NOT NULL, ABitColumn bit NOT NULL DEFAULT ((1)), AStringColumn varchar(10) NOT NULL, AnIntColumn int NULL, CONSTRAINT PK_TableA PRIMARY KEY (Id) )
現在,我可以更改源文件以重新排序 int 和 string 列,架構比較工具將預設顯示該更改:
CREATE TABLE dbo.TableA ( Id int NOT NULL, ABitColumn bit NOT NULL DEFAULT ((1)), AnIntColumn int NULL, AStringColumn varchar(10) NOT NULL, CONSTRAINT PK_TableA PRIMARY KEY (Id) )
正如您所提到的,我可以使用小齒輪圖示啟用“忽略列順序”設置,然後架構比較顯示沒有任何變化。
如果我然後去給我的預設約束命名:
CREATE TABLE dbo.TableA ( Id int NOT NULL, ABitColumn bit NOT NULL CONSTRAINT DF_TableA_ABitColumn DEFAULT ((1)), AnIntColumn int NULL, AStringColumn varchar(10) NOT NULL, CONSTRAINT PK_TableA PRIMARY KEY (Id) )
架構比較顯示列順序更改和約束名稱更改,即使我仍然選中了“忽略列順序”:
查看實際將進行哪些更改的更可靠方法是點擊工具欄中的“生成腳本”按鈕:
生成的腳本不會刪除並重新添加任何列:
USE [$(DatabaseName)]; GO PRINT N'Dropping Default Constraint unnamed constraint on [dbo].[TableA]...'; GO ALTER TABLE [dbo].[TableA] DROP CONSTRAINT [DF__TableA__ABitColu__24927208]; GO PRINT N'Creating Default Constraint [dbo].[DF_TableA_ABitColumn]...'; GO ALTER TABLE [dbo].[TableA] ADD CONSTRAINT [DF_TableA_ABitColumn] DEFAULT ((1)) FOR [ABitColumn]; GO PRINT N'Update complete.';