是否有解析 SQLCMD 变量的选项,在 Visual-Studio 模式比较中进行比较?

Posted

技术标签:

【中文标题】是否有解析 SQLCMD 变量的选项,在 Visual-Studio 模式比较中进行比较?【英文标题】:Is there an option to parse SQLCMD-variables doing a comparison in Visual-Studio schema-comparison? 【发布时间】:2012-11-14 09:06:36 【问题描述】:

看起来 Visual Studio Database Project 没有解析 SQLCMD-variables 进行模式比较。

我所有的同义词看起来像

CREATE SYNONYM [dbo].[addressesExtDB] FOR [$(ExtDB)].[dbo].[addresses];

但它们一直被报告为与数据库不同。

当我使用正确的 'Specify SQLCMD Variabeles...'-settings 进行架构更新时,其中 var ExtDB 设置为 'ExtDBnn',数据库中生成的 Synonym 正确设置为:

CREATE SYNONYM [dbo].[addressesExtDB] FOR [ExtDBnn].[dbo].[addresses];

重新比较操作再次错误地将所有同义词显示为不同。 所以比较应该解析 sqlcmd-variabeles 并使用结果与数据库进行比较。 我是否错过了执行此操作或其他操作的选项,或者您是否遇到了同样的问题并以某种方式找到了解决方案?

【问题讨论】:

【参考方案1】:

不,变量根本不会传递给 VS 中的模式比较(您可以通过例如将您自己的贡献者添加到项目中来验证这一点)。

有趣的是,即使使用 SqlPackage.exe,变量也只会传递给源,而不是目标。

当遇到这种情况时,我结束了数据库名称 -> 在从数据库中获取的 .dacpac 文件中的变量替换 - 一切都以这种方式工作,即使它是一个相当黑客。

【讨论】:

【参考方案2】:

在项目设置中为变量设置默认值。然后 SchemaCompare 将假定它们是相等的。

Schema-Compare without sqlcmd variable Default

Schema-Compare with sqlcmd variable Default

如果这不是您所了解的,您能否让我知道并提供一些说明?干杯

【讨论】:

这个答案对我不起作用。无论将什么值(或空白)设置为默认值或本地值,架构比较都会显示相同的结果。我正在运行 VS2019...

以上是关于是否有解析 SQLCMD 变量的选项,在 Visual-Studio 模式比较中进行比较?的主要内容,如果未能解决你的问题,请参考以下文章

路径中的 SQLCMD 变量

SQL Server 数据库项目属性中的本地和默认 SQLCMD 变量有啥区别?

是否可以在数据库项目中使 SQLCMD 模式“粘滞”

Visual Studio:使用 SQLCMD 变量在部署时更改数据库类型

如何在预脚本中更改 SSDT SQLCMD 变量?

部署 DacPac 时如何在 SqlPackage.exe 中使用多个 SQLCMD 变量?