我的发布尝试因此错误而失败
消息 205,级别 16,状态 1,第 7572 行 所有使用 UNION、INTERSECT 或 EXCEPT 运算符组合的查询必须在其目标列表中具有相同数量的表达式。
采用老式建议在部署脚本执行之间打印状态消息,我将其范围缩小到:
由于 SQL Server 怪癖,行号不匹配,这就是为什么你必须PRINT
像异教徒一样的东西(参见上面的链接)
请注意实际上没有执行任何语句。我还运行了一个详细的跟踪,确认没有执行任何操作:
两个语句之间的控制流语句怎么PRINT
可能导致错误?!
原来该
GO
语句将成功的代码与剩余的代码分开,后者确实包含一个错误的语句(根据错误消息),因此在语法验证期间抛出了错误。通过获取
GO
语句的行号并添加错误消息中显示的行号(实际上是批处理中的偏移量),我发现了一个错误的MERGE
语句,因为双击 SSDT 发布结果中的错误消息将我带到发布脚本中的随机位置。所以它是由语句批处理引起的,语法验证最终在部署脚本上运行(排除在 SQL 项目的构建之外)。