首页 > 解决方案 > 发布配置文件(或架构比较)不会评估 SQLCMD 变量

问题描述

SQLCMD 变量替换多年来一直在我们的项目中工作,但在更新到 VS 16.5 后它停止工作。

发布配置文件(或架构比较)不会评估 SQLCMD 变量。

生成的脚本始终包含使用 SQLCMD 变量并错误地更新目标数据库上的过程的任何文件。它使用变量名(例如($databasename))而不是替换值(即根本不发生替换)

Advanced... 下有一个选项,上面写着“不评估 SQLCMD 变量”。关闭或打开此功能无效。

此缺陷之前曾在 Visual Studio 社区中报告过,但似乎已过早关闭,其他人表示实际上并未修复。

我在 Visual Studio 社区页面中提出了另一个案例,该案例正在经历他们的分类过程,但是我想知道这里是否有其他人遇到过同样的问题并找到了替代解决方案?

我在 Visual Studio 2019 和 2022 中都看到了这个问题。

我目前正在使用

标签: visual-studiosql-server-data-toolsdacpac

解决方案


对于遇到此问题的任何其他人,我们发现替代品正在为不同的项目工作,该项目针对同一服务器上的不同数据库。

这告诉我们,这可能与项目有关。在编译解决方案时,我们注意到我们有以下警告

Warning:  SQL71502: Procedure: [XXX].[YYY] contains an unresolved reference to an object. Either the object does not exist or the reference is ambiguous because it could refer to any of the following objects:.... 

但是,即使在数据库引用中将“抑制引用警告”设置为 false,这并没有使构建失败。

我们从导致我们出现问题的过程之一(例如)中删除了包含 SQLCMD 变量的表引用,并用手重新[$(MyDbName)].[Schema].[Table]编写了它。输入此内容并使用智能感知选择引用的数据库 SQLCMD 变量非常重要。使用复制和粘贴并没有为我们解决问题!

生成的 SQL 是相同的(Git 认为没有更改,也没有什么要签入的),但很明显,Visual Studio 维护了某种类型的引用(可能是 .vs 文件夹中的某些东西??)。更奇怪的是,即使我们没有检入 .vs 文件夹,它也以同样的方式影响了所有用户。

无论如何-HTH


推荐阅读