我在 Visual Studio 中有一个数据库项目,我试图每晚自动部署到测试环境。为此,我使用了 TFS,它利用 PowerShell 脚本运行“ SqlPackage.exe ”来部署白天发生的任何更改。
我的一些 proc 包含在作为代理作业步骤的一部分的脚本内运行的逻辑,并包含以下代码(在动态 SQL 中):
$(ESCAPE_SQUOTE(JOBID))
部署影响此过程的更改时,我遇到以下问题:
SQL 执行错误:发生致命错误。解析 $(ESCAPE_SQUOTE( 时遇到不正确的语法。
这是一个已知问题,似乎不受支持。它似乎是“SQLCmd”命令将 $( 字符误解为变量的函数:
“覆盖发布操作期间使用的 SQL 命令 (sqlcmd) 变量的值。”
那么我该如何解决呢?您无法禁用变量似乎是“sqlcmd”的一个主要限制,我没有看到支持该参数的参数......
更新 1
似乎通过您可以通过提供“-x”参数( Source,Documentation )来禁用“sqlcmd”中的变量替换:
-x(禁用变量替换)
不过,仍然看不到从“SqlPackage.exe”中执行此操作的方法。