为什么:r SQLCMD命令在后期部署脚本中标记为错误?


17

我曾经使用过后期部署脚本工作过几次,并且总是直观地使用构建操作“ PostDeploy”,因为这就是事实。现在,我第一次尝试遵循脚本模板中的内置指令来使用":r somescript.sql"语法。

立即将这一行标记为错误:

“ SQL80001':'旁边的语法错误”

我发现了将PDS设置为“无操作”的建议。这没有帮助,错误仍然存​​在。我在这里想念什么?


抱歉,我想清楚一点:“设置为脚本的动作里面有“:r”?“ :)
Ed Elliott

Answers:


15

假设该错误在构建过程中发生,并且您没有任何实际的语法错误,并且这很简单

:r path\to\file.sql

那么当导入的文件不存在时,也会发生该错误。请检查文件的位置。如果您没有提供绝对路径,则该路径将相对于解决方案文件夹(至少对我而言是这样)。

如果在开发过程中要查看生成过程报告的错误,请确保在Visual Studio的T-SQL编辑器中启用“ SQLCMD模式”。按钮栏中最右边有一个带有“!”的按钮。在它应该启用这一点。或者你可以去SQL菜单,选择“ Transact-SQL编辑器”->,选择“ 执行设置”->,然后最终选择“ SQLCMD模式”。现在,当您执行脚本时,它会正确解释:r,就像构建/发布过程一样。

另外,您的部署后脚本(PDS)需要将其构建操作设置为PostDeploy。如果将其设置为None,则SSDT构建过程将完全跳过它。


4

有效错误

这是因为:r somescript.sql无效的sql。您会看到语法错误,这正是错误消息指出的内容。

SQL80001:“:”附近的语法不正确。

SQLCMD模式

部署后脚本在SQLCMD模式下执行。

使用sqlcmd实用程序,您可以在命令提示符下,以SQLCMD模式在查询编辑器中,在Windows脚本文件中或在SQL Server的操作系统(Cmd.exe)作业步骤中输入Transact-SQL语句,系统过程和脚本文件。代理工作。该实用程序使用ODBC执行Transact-SQL批处理。

解析度

请记住,您能够连接到数据库并从Visual Studio中执行sql。如果在SSMS中打开相同的脚本,则会看到相同的语法错误。但是,在SSMS和Visual Studio中,都可以“启用” SQLCMD模式。

VS 2017

  • 右键单击包含sql脚本的编辑器
  • 单击执行设置
  • 单击SQLCMD模式
  • 请注意,您可以从SQL菜单执行相同的操作

SSMS 17,SSMS 18

  • 查询(菜单项)
  • SQLCMD模式

也可以看看

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.