从 SSDT 部署中排除特定表

Jus*_*ing 12 deployment 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
)
Run Code Online (Sandbox Code Playgroud)

这取决于 dbo.a。dbo.a 有许多列是其他列的外键。其他人(维护默认架构的人)可能会更改 dbo.a。

我想简单地将 dbo.a 存储为:

CREATE table dbo.a (
    id INT NOT NULL
        CONSTRAINT [PK_a] PRIMARY KEY CLUSTERED
)
Run Code Online (Sandbox Code Playgroud)

所以它在内部构建,但没有部署。那可能吗?

小智 11

您可以使用AgileSqlClub SqlPackage 部署过滤器

简要说明转载自原来的文章爱德艾略特

  1. agilesqlclub.codeplex.com下载过滤器
  2. 放入DLL同一个文件夹sqlpackage.exe
  3. 将这些命令行参数添加到您的部署中:

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

    这既不会部署、删除或更改BLAH架构中的任何内容。

有关完整详细信息,请参阅原始文章


SQL*_*mer 3

仅管理数据库的一部分SSDT是很困难的。如果没有依赖关系,那么您可以简单地禁止它删除对象并且不将其包含在项目中。由于存在依赖关系,但您不想管理它们,我认为您将不得不欺骗系统。

我想到了一种方法,我现在没有能力测试它们,我只使用了一种与此“类似”的方法,而不是确切的这种方法。

选项1:

  1. 在其中创建一个新的数据库项目dbo.a

  2. 参考由三部分组成的命名表。对于名称的第一部分,使用 SQLCMD 变量。例如[$(DatabaseName)].dbo.a.

  3. 切勿部署foo数据库。

  4. 通过发布文件或cli接口,使$(DatabaseName)名称与您的真实数据库相同。