Ssdt
從 SSDT 部署中排除特定表
我有一個現有的數據庫,其中包含 schema 中的所有內容
dbo
。我有一個 SSDT 項目,其中包含我使用模式添加到其中的對象foo
我在項目中有一個看起來像這樣的表:
CREATE table foo.a ( id INT NOT NULL CONSTRAINT [PK_foo_a] PRIMARY KEY CLUSTERED CONSTRAINT [FK_foo_a] FOREIGN KEY REFERENCES [dbo].[a], desc NVARCHAR(50) NOT NULL )
這取決於 dbo.a。dbo.a 有許多列是其他列的外鍵。其他人(維護預設模式)可能會更改 dbo.a。
我想簡單地將 dbo.a 儲存為:
CREATE table dbo.a ( id INT NOT NULL CONSTRAINT [PK_a] PRIMARY KEY CLUSTERED )
所以它是在內部建構的,但沒有部署。那可能嗎?
您可以使用AgileSqlClub SqlPackage 部署過濾器。
從Ed Elliott的原始文章中複製的簡要說明:
- 從agilesqlclub.codeplex.com下載過濾器
- 放入
DLL
同一個文件夾sqlpackage.exe
- 將這些命令行參數添加到您的部署中:
/p:AdditionalDeploymentContributors=AgileSqlClub.DeploymentFilterContributor
/p:AdditionalDeploymentContributorArguments="SqlPackageFilter=IgnoreSchema(BLAH)"
這不會部署、刪除或更改
BLAH
模式中的任何內容。有關完整的詳細資訊,請參閱原始文章。
僅管理數據庫的一部分
SSDT
是很困難的。如果沒有依賴項,那麼您可以簡單地禁止它刪除對象並且不將其包含在項目中。由於存在依賴關係,但您不想管理它們,我認為您將不得不欺騙系統。想到一種方法,我現在沒有能力測試它們,我只使用了一種“類似”的方法,而不是這個方法。
選項1:
- 在其中創建一個新的數據庫項目
dbo.a
。- 使用 3 部分命名引用該表。對於名稱的第一部分,使用 SQLCMD 變數。例如
[$(DatabaseName)].dbo.a.
- 永遠不要部署你的
foo
數據庫。- 通過發布文件或 cli 界面,使
$(DatabaseName)
名稱與您的真實數據庫相同。