使用查询编辑器编辑 SQLCMD 脚本

更新日期: 2006 年 7 月 17 日

使用 Microsoft SQL Server 查询编辑器,可以将查询作为 SQLCMD 脚本来进行编写和编辑。 查询编辑器中的 SQLCMD 脚本可以使用所有 Transact-SQL 脚本能够使用的功能。 这些功能包括:

  • 颜色编码
  • 执行脚本
  • 源代码管理
  • 分析脚本
  • 显示计划

在查询编辑器中启用 SQLCMD 脚本撰写

若要使用 SQL Server 查询编辑器编写或编辑 SQLCMD 脚本,您必须启用脚本撰写模式。 默认情况下,查询编辑器中将不启用该模式。 可以通过在工具栏中单击**“SQLCMD 模式”图标或从“查询”菜单中选择“SQLCMD 模式”**来启用脚本撰写模式。 这些方法将为当前窗口启用 SQLCMD 脚本撰写。

若要将查询编辑器窗口切换到 SQLCMD 模式,请执行以下操作:

  1. 在对象资源管理器中,右键单击服务器,再单击**“新建查询”**以打开新的查询编辑器窗口。

  2. 在**“查询”菜单中,单击“SQLCMD 模式”**。

    查询编辑器将在其上下文中执行 sqlcmd 语句。

  3. 在**“SQL 编辑器”工具栏的“可用数据库”**列表中,选择 AdventureWorks

  4. 在查询编辑器窗口中,键入以下两个 Transact-SQL 语句和 !!DIRsqlcmd 语句:

    SELECT DISTINCT Type FROM Sales.SpecialOffer;
    GO
    !!DIR
    GO
    SELECT ProductCategoryID, Name FROM Production.ProductCategory;
    GO
    
  5. 按 F5 执行整个 Transact-SQL 和 MS-DOS 语句的混合部分。

    请注意第一个和第三个语句产生的两个 SQL 结果窗格。

  6. 在**“结果”窗格中,单击“消息”**选项卡可以查看所有三个语句产生的消息:

    • (6 row(s) affected)
    • <目录信息>
    • (4 row(s) affected)
ms174187.note(zh-cn,SQL.90).gif重要提示:
从命令行执行 sqlcmd 实用工具时,该工具允许与操作系统完全交互。 在“SQLCMD 模式”下使用查询编辑器时,必须注意不要执行交互语句。 查询编辑器无法响应操作系统提示。

有关如何运行 SQLCMD 的详细信息,请参阅 sqlcmd 实用工具 或学习 SQLCMD 教程。

默认启用 SQLCMD 脚本撰写

若要默认启用 SQLCMD 脚本撰写,请在**“工具”菜单中选择“选项”,展开“查询执行”SQL Server,单击“常规”页面,然后选中“默认情况下,在 SQLCMD 模式下打开新查询”**框。

编写和编辑 SQLCMD 脚本

启用脚本撰写模式后,可以编写 SQLCMD 命令和 Transact-SQL 语句。 下列规则适用:

  • SQLCMD 命令必须是一行中的第一个语句。
  • 每行只允许使用一个 SQLCMD 命令。
  • SQLCMD 命令前可以添加注释或空格。
  • 注释字符内的 SQLCMD 命令不会执行。
  • 单行注释字符包含两个连字符 (--),必须位于一行的开头。
  • 操作系统命令前面必须具有两个感叹号 (!!)。 两个感叹号命令使其后的语句通过 cmd.exe 命令处理器来执行。 !! 后面的文本作为一个参数传递到 cmd.exe,因此最终的命令行将如此执行:"%SystemRoot%\system32\cmd.exe /c <text after !!>"
  • 为了清楚地区分 SQLCMD 命令和 Transact-SQL,所有的 SQLCMD 命令都需要在前面添加冒号 (:)。
  • GO 命令可以直接使用,无需在其前面加 !!:
  • 查询编辑器支持环境变量和定义为 SQLCMD 脚本的一部分的变量,但不支持内置的 SQLCMD 或 osql 变量。
ms174187.Caution(zh-cn,SQL.90).gif注意:
在常规模式和 SQLCMD 模式下,SQL Server Management Studio 使用 Microsoft .NET SqlClient 执行。 从命令行运行时,SQLCMD 将使用 OLE DB 访问接口。 由于可以应用不同的默认选项,因此在 SQL Server Management Studio SQLCMD 模式下以及在 SQLCMD 实用工具中执行相同的查询时,可能会获得不同的行为。

支持的 SQLCMD 语法

查询编辑器支持以下 SQLCMD 脚本关键字:

[!!:]GO[count]

!! <command>

:exit(statement)

:Quit

:r <filename>

:setvar <var> <value>

:connect server[\instance] [-l login_timeout] [-U user [-P password]]

:on error [ignore|exit]

:error <filename>|stderr|stdout

:out <filename>|stderr|stdout

ms174187.note(zh-cn,SQL.90).gif注意:
对于 :error:outstderrstdout 将向消息选项卡发送输出。

查询编辑器不支持上面未列出的 SQLCMD 命令。 执行包含不支持的 SQLCMD 关键字的脚本时,查询编辑器会为每个不支持的关键字向目标发送一条“忽略命令 <ignored command>”消息。 脚本将成功执行,但同时忽略不支持的命令。

ms174187.Caution(zh-cn,SQL.90).gif注意:
因为不是从命令行启动 SQLCMD,所以在 SQLCMD 模式下运行查询编辑器时会有一些限制。 不能传入命令行参数(如变量),而且,由于查询编辑器无法响应操作系统提示,因此必须注意不要执行交互语句。

SQLCMD 脚本中的颜色编码

启用 SQLCMD 脚本撰写后,脚本将进行颜色编码。 Transact-SQL 关键字的颜色编码将保持不变。 SQLCMD 命令用阴影背景来表示。

示例

以下示例使用 sqlcmd 语句创建名为 testoutput.txt 的输出文件,并将两个 Transact-SQL SELECT 语句与一个操作系统命令一起执行(以打印当前目录)。 结果文件包含 DIR 语句的消息输出,后面跟有 Transact-SQL 语句的结果输出。

:out C:\testoutput.txt
SELECT @@VERSION As 'Server Version'
!!DIR
!!:GO
SELECT @@SERVERNAME AS 'Server Name'
GO

请参阅

其他资源

sqlcmd 实用工具
SQL Server Management Studio 教程

帮助和信息

获取 SQL Server 2005 帮助

更改历史记录

发布日期 历史记录

2006 年 7 月 17 日

新增内容:
  • 添加了将查询编辑器窗口切换到 SQLCMD 模式的过程。

2005 年 12 月 5 日

更改的内容:
  • 更正了有关 GO 的语法。
  • 添加了示例。
  • 合并了 SQLCMD 模式主题的内容