Ssdt

從 SSDT 部署中排除特定表

  • September 19, 2019

我有一個現有的數據庫,其中包含 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的原始文章中複製的簡要說明:

  1. 從agilesqlclub.codeplex.com下載過濾器
  2. 放入DLL同一個文件夾sqlpackage.exe
  3. 將這些命令行參數添加到您的部署中:

/p:AdditionalDeploymentContributors=AgileSqlClub.DeploymentFilterContributor /p:AdditionalDeploymentContributorArguments="SqlPackageFilter=IgnoreSchema(BLAH)"

這不會部署、刪除或更改BLAH模式中的任何內容。

有關完整的詳細資訊,請參閱原​​始文章

僅管理數據庫的一部分SSDT是很困難的。如果沒有依賴項,那麼您可以簡單地禁止它刪除對象並且不將其包含在項目中。由於存在依賴關係,但您不想管理它們,我認為您將不得不欺騙系統。

想到一種方法,我現在沒有能力測試它們,我只使用了一種“類似”的方法,而不是這個方法。

選項1:

  1. 在其中創建一個新的數據庫項目dbo.a
  2. 使用 3 部分命名引用該表。對於名稱的第一部分,使用 SQLCMD 變數。例如[$(DatabaseName)].dbo.a.
  3. 永遠不要部署你的foo數據庫。
  4. 通過發布文件或 cli 界面,使$(DatabaseName)名稱與您的真實數據庫相同。

引用自:https://dba.stackexchange.com/questions/110957