如何在构建时忽略 .sql 文件,但将其包含在架构比较中
Posted
技术标签:
【中文标题】如何在构建时忽略 .sql 文件,但将其包含在架构比较中【英文标题】:How to ingore a .sql file on build but include it on schema compare 【发布时间】:2015-12-29 16:47:30 【问题描述】:有没有办法在构建 SQL Server Database Project
时忽略一些 SQL 文件,但将它们包含在架构比较中?
我的意思是,我们有一些 SQL 文件会导致构建失败(它们指向我们无法访问的链接服务器)。我们想要的是从构建中排除它(以便构建通过),但在模式比较中包含它(以便我们可以查看它是否被修改)。
有什么建议吗?
【问题讨论】:
【参考方案1】:当您部署时,使用部署过滤器来阻止正在部署的对象,您可以自己编写或使用我的过滤器,这样您就可以按名称、方案或类型排除对象:
http://agilesqlclub.codeplex.com/
这意味着您可以与您的项目进行比较,并且仍然可以在不接触项目的情况下进行部署。
埃德
【讨论】:
虽然我会尽量考虑在某个时候添加数据库引用/链接服务器 - 以保持一致性。 :) 感谢@EdElliot 的回复。我想要的是在“模式比较”中 include 对象(该对象不包含在构建中,因此现在没有进行比较)。我可以通过使用 SqlPackage.exe 的部署过滤器来实现这一点吗?或者可以从 Visual Studio IDE 使用部署筛选器吗? (我没用过SqlPackage.exe) 是的,默认情况下它将包含在 schem 比较中 - 要将其从部署中排除,您如何部署到 yurndev 和 prod 环境?【参考方案2】:我承认我没有提供您想要的解决方案,但您尝试做的是围绕 SSDT 工作。这可能会带来比其价值更大的痛苦,并且通常更容易正确解决问题 - 在这种情况下,是无法构建的脚本。
我假设您在链接服务器上遇到的问题是因为它有一个未解析的引用 - 在这种情况下,我建议您改用 SQLCMD 变量。
SQLCMD 变量将抽象出链接服务器名称,因此 SSDT 将停止尝试解析它,并且应该允许您构建。部署数据库时(使用发布配置文件或 sqlpackage.exe),您可以指定要使用的 SQLCMD 值,并且在进行比较时也是如此。
这是一个以这种方式使用 SQLCMD 变量的示例: http://ntsblog.homedev.com.au/index.php/2013/03/13/sqlcmd-variables-linked-server-connection-intellisense/
如果这对您不起作用,请告诉我您使用哪种对象/一些示例代码或屏幕截图,我会尽力帮助您。
【讨论】:
感谢@hanzworld 的回复,但我无法访问链接服务器,因此无法导入数据库(您帖子的第 1.3 步) 抱歉,我会给你一些正确的步骤 - 你可以在不导入数据库的情况下做到这一点,显然我的谷歌 fu 失败了 :)以上是关于如何在构建时忽略 .sql 文件,但将其包含在架构比较中的主要内容,如果未能解决你的问题,请参考以下文章