在 Transact-SQL 编辑器中编辑 SQL CMD 脚本

在 Transact-SQL 编辑器中编写或编辑脚本时,如果首先启用了 SQLCMD 模式,则可以使用 Transact-SQL 与 SQLCMD 命令的组合。有关更多信息,请参见如何:在 Transact-SQL 编辑器中启用 SQL CMD 模式

编写和编辑 SQLCMD 脚本

如果希望在同一脚本中同时包括 SQLCMD 命令和 Transact-SQL 命令,则必须确保该脚本符合以下要求:

  • SQLCMD 命令必须是一行中的第一个语句。

  • 每行只允许使用一个 SQLCMD 命令。

  • SQLCMD 命令前可以带有注释或空格。

  • 单行注释字符包含两个连字符 (--),而且必须位于一行的开头。注释字符不允许执行 SQLCMD 命令。

  • 在每个 SQLCMD 命令前,必须在一行开头放置一个冒号,以明确将其与 Transact-SQL 命令区别开来。唯一的例外是 exit 和 !! 命令,对于它们而言冒号是可选的。

  • 您可以使用环境变量和那些定义为 SQLCMD 脚本一部分的变量,但不能使用内置 SQLCMD 变量。

支持的 SQLCMD 语法

可以使用以下命令:

  • :r 文件名
    将由文件名 指定的文件中的其他l Transact-SQL 语句和 SQLCMD 命令分析为语句缓存。 相对于 Visual Studio 的启动目录读取文件名。在遇到批处理终止符后读取并执行文件。可以发出多个 :r 命令。文件可以包括任何 SQLCMD 命令,包括在“工具”、“选项”中定义的批处理终止符。可以在预先部署或后期部署脚本中使用 :r 以包括其他脚本。

  • :setvar 变量值
    定义脚本变量。脚本变量具有如下格式:$(Variable)。变量名称不区分大小写。如果使用 :Setvar 定义的变量具有与环境变量相同的名称,则使用 :setvar 定义的变量优先。变量名称不能包含空白字符。变量名称不能具有与变量表达式(如 $(var))相同的形式。如果脚本变量的字符串值包含空格,则必须用引号将该值引起来。如果未指定脚本变量的值,则将丢弃该脚本变量。

  • :connect 服务器名称[\实例名] [-l 超时] [-U 用户名 [-P 密码]]
    在经过由超时指定的秒数后,连接到 SQL Server 的实例并关闭当前连接。可以为无限长的超时或正秒数指定“-l 0”,如“-l 30”。如果您为用户名 和密码 既不提供选项也不提供环境变量,则会采用 Windows 身份验证模式来登录。 在 Transact-SQL 编辑器中运行 connect SQLCMD 命令时,仍会提示您使用**“连接到数据库引擎”**窗口连接到数据库服务器。

  • :on error [exit |ignore]
    设置在脚本或批处理执行过程中发生错误时要执行的操作。如果使用 exit 选项,则执行将退出,并显示相应的错误值。如果使用 ignore 选项,则 Transact-SQL 编辑器将忽略错误,继续执行批处理或脚本。默认情况下输出错误消息。

  • :out 文件名| stderr | stdout
    将所有查询结果重定向到由文件名指定的文件或**“消息”选项卡。(在 Visual Studio 中,stderr 和 stdout 向“消息”选项卡发送输出。)out 命令可以在脚本中出现多次。默认情况下,输出发送到“消息”**选项卡。如果指定文件名,则 Visual Studio 将创建或打开要接收查询结果的文件。如果文件已存在,则在写入输出前将其截断成零字节。

  • :error 文件名| stderr | stdout
    将所有错误输出重定向到由文件名指定的文件或**“消息”选项卡。(在 Visual Studio 中,stderr 和 stdout 向“消息”**选项卡发送输出。)  error 命令可以在脚本中出现多次。默认情况下,错误输出发送到 stderr。如果指定文件名,则 Visual Studio 将创建或打开要接收错误消息的文件。如果文件已存在,则在写入错误消息前将其截断成零字节。

  • [:]exit
    停止当前批处理,但不执行批处理或返回任何值。

  • [:]exit()
    执行批处理,然后停止且不返回任何值。

  • [:]exit(查询)
    执行批处理(包括查询),返回查询的结果,然后停止。

  • [:]!!操作系统命令
    在运行 Visual Studio 的计算机上执行操作系统命令。若要执行操作系统命令,请用两个感叹号 (!!) 开始一行,后跟操作系统命令。

提示

由于未从命令行启动 SQLCMD,所以在 SQLCMD 模式下运行 Transact-SQL 编辑器时存在一些限制。不能传入命令行参数(如变量),并且由于 Transact-SQL 编辑器不能响应操作系统提示,所以必须注意不要执行交互式语句。

Transact-SQL 编辑器中不支持上面未列出的 SQLCMD 命令。当执行包含不支持的 SQLCMD 关键字的脚本时,Transact-SQL 编辑器将向每个不支持的关键字的目标发送消息“Command <unsupported command> is not supported. String was not processed.”。脚本将成功执行,但将忽略不支持的命令。

SQLCMD 脚本中的颜色编码

当启用**“SQLCMD 模式”**时,脚本将按颜色进行编码。Transact-SQL 关键字的颜色编码将保持不变。SQLCMD 命令用阴影背景来表示。

示例

下面的示例使用 SQLCMD 语句创建名为 c:\TempSqlcmdOutput 的输出文件夹和名为 testoutput.txt 的输出文件。该示例还执行两个 Transact-SQL SELECT 语句和另一个 SQLCMD 命令,以输出 Visual Studio 程序的当前目录。产生的文件包含 DIR 语句的消息输出,后跟 Transact-SQL 语句的结果输出。本示例假设到 SQL Server 实例的连接已建立,且**“SQLCMD 模式”**已启用。

!!mkdir c:\TempSqlcmdOutput
:out c:\TempSqlCmdOutput\testoutput.txt
select @@VERSION as 'Server Version'
!!dir
GO
select @@SERVERNAME as 'Server Name'
GO 4

请参阅

任务

如何:执行查询

如何:设置查询执行和结果的选项

概念

查询结果概述