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

更新:2007 年 11 月

在 Transact-SQL (T-SQL) 编辑器中编写或编辑脚本时,如果事先启用了 SQLCMD 模式,则可以混合使用 T-SQL 和 SQLCMD 命令。有关更多信息,请参见如何:在 Transact-SQL 编辑器中启用 SQLCMD 模式

编写和编辑 SQLCMD 脚本

如果要在同一个脚本中包含 SQLCMD 命令和 T-SQL 命令,则必须确保脚本符合下列要求:

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

  • 每行中的 SQLCMD 命令不能多于 1 个。

  • 可在 SQLCMD 命令前面加上注释或空白。

  • 可使用注释字符阻止 SQLCMD 命令执行。

  • 必须在一行的开头使用两个连字符以构成每个单行注释字符。

  • 必须在每条 SQLCMD 命令前面放置一个冒号以将其与 T-SQL 命令明确区分。

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

使用 SQLCMD 语法

可使用以下命令:

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

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

  • :connect 服务器名称[\实例名称] [-l 超时] [-U 用户名 [-P 密码]]
    连接到 Microsoft SQL Server 的一个实例,并在经过由 超时 指定的秒数之后关闭当前连接。可指定“-l 0”表示无限超时,或指定正数秒数,如“-l 30”。如果未提供 用户名 和 密码 的相应选项或环境变量,则使用 Windows 身份验证模式登录。

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

  • :listvar
    显示当前设置的脚本变量的列表。只显示当前会话中以 SQLCMD 模式设置的脚本变量。

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

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

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

示例

若要使用集成的安全性连接到 SQL Server myserver 的实例 instance1,可包含以下命令:

:connect myserver\instance1.

若要使用脚本变量连接到 myserver 的默认实例,可包含以下命令:

:setvar myusername test

:setvar myservername myserver

:connect $(myservername) $(myusername)

若要执行存储在 C:\Files 下的 selectFromTable.sql 文件中的简单查询,可包含以下命令:

:SETVAR tablevar Suppliers

:r C:\Files\selectFromTable.sql

GO

:SETVAR tablevar Customers

:r C:\Files\selectFromTable.sql

GO

selectFromTable.sql 文件包含以下示例查询:

SELECT * FROM $(tablevar)

GO

请参见

任务

如何:执行查询

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

概念

查询结果概述