从SSDT部署中排除特定表


11

我有一个现有的数据库,所有内容都在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
)

因此它是在内部构建的,但未部署。那可能吗?


您不将Schema Compare用于您的部署吗?检测到更改后,您只需从列表中取消选中该表即可。
戴夫

我正在做一个方案比较,但是从我的笔记本电脑到我想进行实际发布部署的开发服务器都没有。
贾斯汀·迪林

Answers:


11

您可以使用AgileSqlClub SqlPackage部署筛选器

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

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

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

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

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


当我通过foo.publish.xml文件从devenv.exe进行部署时,它不会产生sqlpackage.exe。有办法使它做到吗?
贾斯汀·迪林

我所要做的就是从未使用devenv部署更改,而是构建项目并使用脚本来驱动sqlpackage.exe-这样,您可以轻松完成诸如使用部署贡献者之类的工作,并测试可以在其他环境中使用的相同脚本在您的ci过程中!
Ed Elliott

这对我来说是一个巨大的帮助,我只需要部署特定的架构。对于将来的其他人,请注意ignoreschema方法可以采用正则表达式IgnoreSchema(^(?!\ b(?i)BLAH \ b)。*)来忽略
除BLAH

3

仅使用管理数据库的一部分SSDT是困难的。如果没有依赖项,则可以简单地禁止它删除对象,而不将其包括在项目中。由于存在依赖关系,但是您不想管理它们,因此我认为您必须欺骗系统。

我想到一种方法,我现在没有能力对其进行测试,而我仅对此使用了一种“类似”方法,而并非完全使用这种方法。

选项1:

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

  2. 使用三部分命名来引用该表。对于名称的第一部分,请使用SQLCMD变量。例如[$(DatabaseName)].dbo.a.

  3. 切勿部署foo数据库。

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


可以尝试一下
贾斯汀·迪宁

@JustinDearing使用部署过滤器方法,它完全适合您的用例(即,将所有表保留在源代码管理中,而在部署时忽略其中的某些表)
Ed Elliott

0

一种“干净”的内置方法(自2016年起)使用已保存的架构比较文件。您可以:

  1. 执行模式比较(从数据库项目->目标服务器),然后取消选中要排除以进行更新的所有对象。
  2. 将您的架构比较保存为* .scmp文件
  3. 如果需要,您可以复制并粘贴.scmp文件以创建用于不同环境的版本,只需在XML编辑器中进行编辑即可更改源(指向构建输出dacpac文件),连接等,甚至可以手动添加/修改本节中的项目。
  4. 配置dacpac部署/发布命令参数以使用适当的.scmp文件进行发布。例如SqlPackage.exe / Action:发布/SourceFile:c:\project\schema_compare.scmp

此处的更多信息:https : //devblogs.microsoft.com/ssdt/schema-compare-in-sqlpackage-and-the-data-tier-application-framework-dacfx/

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.