zoukankan      html  css  js  c++  java
  • sqlcmd命令详解

    引用自微软MSDN:http://msdn.microsoft.com/zh-cn/library/ms162773.aspx

    一、输入参数

     
    sqlcmd  [{ { -U login_id [ -P password ] } | –E trusted connection }] [ -z new password ] [ -Z new password and exit] [ -S server_name [ \ instance_name ] ] [ -H wksta_name ] [ -d db_name ] [ -l login time_out ] [ -A dedicated admin connection ] [ -i input_file ] [ -o output_file ] [ -f < codepage > | i: < codepage > [ < , o: < codepage > ] ] [ -u unicode output ] [ -r [ 0 | 1 ] msgs to stderr ] [ -R use client regional settings ] [ -q "cmdline query" ] [ -Q "cmdline query" and exit ] [ -e echo input ] [ -t query time_out ] [ -I enable Quoted Identifiers ] [ -v var = "value"...] [ -x disable variable substitution ] [ -h headers ][ -s col_separator ] [ -w column_width ] [ -W remove trailing spaces ] [ -k [ 1 | 2 ] remove[replace] control characters ] [ -y display_width ] [-Y display_width ] [ -b on error batch abort ] [ -V severitylevel ] [ -m error_level ] [ -a packet_size ][ -c cmd_end ] [ -L [ c ] list servers[clean output] ] [ -p [ 1 ] print statistics[colon format]] [ -X [ 1 ] ] disable commands, startup script, enviroment variables [and exit] [ -? show syntax summary ]

    [注释]:

    不必按语法部分所示的顺序使用选项。

    在返回多个结果时,sqlcmd 在批处理中的每个结果集之间输出一个空行。此外,如果没有应用于已执行的语句,则“<x> 行受影响”消息不会出现。

    若要交互使用 sqlcmd,请在命令提示符处使用本主题前面介绍的一个或多个选项键入 sqlcmd。有关详细信息,请参阅使用 sqlcmd 实用工具

    注意:
    -L-Q-Z-i 选项会导致 sqlcmd 在完成执行后退出。
    二、sqlcmd 命令

    sqlcmd 中的 Transact-SQL 语句之外,还可使用以下命令:

     

    GO [count]

    :List

    [:] RESET

    :Error

    [:] ED

    :Out

    [:] !!

    :Perftrace

    [:] QUIT

    :Connect

    [:] EXIT

    :On Error

    :r

    :Help

    :ServerList

    :XML [ON | OFF]

    :Setvar

    :Listvar

    使用 sqlcmd 命令时,请注意以下事项:

    • 除 GO 以外,所有 sqlcmd 命令必须以冒号 (:) 为前缀。
      ms162773.note(zh-cn,SQL.100).gif重要提示:
      为了保持现有 osql 脚本的向后兼容性,有些命令会被视为不带冒号。这由 [:] 指示。
    • sqlcmd 命令只有出现在一行的开头时,才能够被识别。
    • 所有 sqlcmd 命令都不区分大小写。
    • 每个命令都必须位于单独的行中。命令后面不能跟随 Transact-SQL 语句或其他命令。
    • 命令将被立即执行。它们与 Transact-SQL 语句不同,不会放在执行缓冲区中。
    编辑命令
    [:] ED

    启动文本编辑器。该编辑器可以用来编辑当前的 Transact-SQL 批处理或上次执行的批处理。若要编辑上次执行的批处理,必须在上一批处理执行完之后立即键入 ED 命令。

    文本编辑器由 SQLCMDEDITOR 环境变量定义。默认编辑器为“Edit”。若要更改编辑器,请设置 SQLCMDEDITOR 环境变量。例如,若要将编辑器设置为 Microsoft 记事本,请在命令提示符处键入:

    DE>SET SQLCMDEDITOR=notepadDE>

    [:] RESET

    清除语句缓存。

    :List

    输出语句缓存的内容。

    变量
    :Setvar <var> [ "value" ]

    定义 sqlcmd 脚本变量。脚本变量具有如下格式:DE>$(VARNAME)DE>。

    变量名称不区分大小写。

    可以通过下列方式设置脚本变量:

    • 隐式使用命令行选项。例如,-l 选项设置 SQLCMDLOGINTIMEOUT sqlcmd 变量。
    • 显式使用 :Setvar 命令。
    • 在运行 sqlcmd 之前定义一个环境变量。
    ms162773.note(zh-cn,SQL.100).gif注意:
    -X 选项可防止将环境变量传递给 sqlcmd

    如果使用 :Setvar 定义的变量和某个环境变量同名,则使用 :Setvar 定义的变量优先。

    变量名中不能包含空格字符。

    变量名不能与变量表达式(如 $(var))具有相同的形式。

    如果脚本变量的字符串值中含有空格,请用引号将该值引起来。如果未指定脚本变量的值,则将删除该脚本变量。

    :Listvar

    显示当前设置的脚本变量列表。

    ms162773.note(zh-cn,SQL.100).gif注意:
    只显示由 sqlcmd 设置的脚本变量和使用 :Setvar 命令设置的脚本变量。
    输出命令
    :Error < filename >| STDERR|STDOUT

    将所有错误输出重定向到 file name 指定的文件、stderrstdoutError 命令可以在一个脚本中多次出现。默认情况下,错误输出将发送到 stderr

    file name

    创建并打开一个要接收输出的文件。若该文件已经存在,则将其截断为零字节。若该文件不可用(由于权限或其他原因),将不会切换输出,也不会将输出发送到上次指定的目标或默认目标。

    STDERR

    将错误输出切换至 stderr 流。如果已经重定向,流的重定向目标将会收到错误输出。

    STDOUT

    将错误输出切换至 stdout 流。如果已经重定向,流的重定向目标将会收到错误输出。

    :Out < filename>| STDERR| STDOUT

    创建所有查询结果并将它们重定向到 file name 指定的文件、stderrstdout。默认情况下,输出将发送到 stdout。若该文件已经存在,则将其截断为零字节。Out 命令可以在一个脚本中多次出现。

    :Perftrace < filename>| STDERR| STDOUT

    创建所有性能跟踪信息并将它们重定向到 file name 指定的文件、stderrstdout。默认情况下,性能跟踪输出将发送到 stdout。若该文件已经存在,则将其截断为零字节。Perftrace 命令可以在一个脚本中多次出现。

    执行控制命令
    :On Error[ exit | ignore]

    设置在脚本或批处理执行过程中发生错误时要执行的操作。

    使用 exit 选项时,sqlcmd 退出,并显示相应的错误值。

    使用 ignore 选项时,sqlcmd 会忽略错误,并继续执行批处理或脚本。默认情况下,会输出错误消息。

    [:] QUIT

    导致 sqlcmd 退出。

    [:] EXIT[ (statement) ]

    允许您将 SELECT 语句的结果用作 sqlcmd 的返回值。第一个结果行的第一列转换为 4 字节的整数(长整型)。MS-DOS 将低字节传递给父进程或操作系统错误级别。Windows 200x 传递整个 4 字节整数。语法为:

    DE>:EXIT(query)DE>

    例如:

    DE>:EXIT(SELECT @@ROWCOUNT)DE>

    您还可以在批处理文件中包含 EXIT 参数。例如,在命令提示符处键入:

    DE>sqlcmd -Q "EXIT(SELECT COUNT(*) FROM '%1')"DE>

    sqlcmd 实用工具将圆括号 ( ) 中的所有内容发送给服务器。如果系统存储过程选择了一个集合并返回一个值,则仅返回选择的内容。如果圆括号中没有任何内容,则 EXIT ( ) 语句会执行批处理中此语句前的所有内容,然后退出,且不返回任何值。

    当指定了错误查询时,sqlcmd 将退出,且不返回任何值。

    下面是 EXIT 格式的列表:

    • :EXIT

    不执行批处理就立即退出,无返回值。

    • :EXIT( )

    执行批处理后退出,不返回值。

    • :EXIT(query)

    执行包括查询的批处理,返回查询的结果后退出。

    如果在 sqlcmd 脚本中使用 RAISERROR,并且出现状态 127,则 sqlcmd 将退出,并将消息 ID 返回给客户端。例如:

    DE>RAISERROR(50001, 10, 127)DE>

    该错误会导致 sqlcmd 脚本终止并将消息 ID 50001 返回给客户端。

    SQL Server 保留了介于 -1 到 -99 之间的返回值;sqlcmd 定义了以下附加返回值:

     

    返回值 说明

    -100

    选择返回值前遇到错误。

    -101

    选择返回值时找不到行。

    -102

    选择返回值时发生转换错误。

    GO [count]

    GO 在批处理和执行任何缓存 Transact-SQL 语句结尾时会发出信号。在为 count 指定一个值时,缓存的语句会被作为单个批处理执行 count 次。

    其他命令
    :r < filename>

    将来自通过 <filename>所指定文件的其他 Transact-SQL 语句和 sqlcmd 命令分析到语句缓存中。

    如果文件包含的 Transact-SQL 语句后面没有跟随 GO,则必须在 :r 的后一行中输入 GO

    ms162773.note(zh-cn,SQL.100).gif注意:
    系统会相对于 sqlcmd 在其中运行的启动目录读取 <filename>

    当遇到批处理终止符之后,将读取并执行该文件。可以发出多个 :r 命令。该文件可以包含任何 sqlcmd 命令。包括批处理终止符 GO

    ms162773.note(zh-cn,SQL.100).gif注意:
    每遇到一个 :r 命令,交互模式下显示的行计数都会加一。:r 命令会出现在 list 命令的输出中。
    :Serverlist

    列出在本地配置的服务器和在网络上广播的服务器的名称。

    :Connect server_name[\instance_name] [-l timeout] [-U user_name [-P password]]

    连接到 SQL Server 的一个实例。同时关闭当前的连接。

    超时选项:

     

    0

    永远等待

    n>0

    等待 n 秒钟

    SQLCMDSERVER 脚本变量将反映当前的活动连接。

    如果未指定 timeout,则其默认值将为 SQLCMDLOGINTIMEOUT 变量的值。

    仅当指定了 user_name(作为选项或环境变量)时,才会提示用户输入密码。如果已设置 SQLCMDUSER 或 SQLCMDPASSWORD 环境变量,则不会出现此提示。如果既未提供选项,又未提供环境变量,则使用 Windows 身份验证模式登录。例如,若要使用集成安全性连接到 SQL Server DE>myserverDE> 的一个实例(如 DE>instance1DE>),则会使用以下内容:

    DE>:connect myserver\instance1DE>

    若要使用脚本变量连接到 DE>myserverDE> 的默认实例,您会使用以下内容:

    DE>:setvar myusername testDE>

    DE>:setvar myservername myserverDE>

    DE>:connect $(myservername) $(myusername)DE>

    [:] !!< command>

    执行操作系统命令。若要执行操作系统命令,请用两个感叹号 (!!) 开始一行,后面输入操作系统命令。例如:

    DE>:!! DirDE>

    ms162773.note(zh-cn,SQL.100).gif注意:
    该命令在运行 sqlcmd 的计算机上执行。
    :XML [ON | OFF]

    有关详细信息,请参阅本主题后面的“XML 输出格式”

    :Help

    列出 sqlcmd 命令以及每个命令的简短说明。

    sqlcmd 文件名

    可以使用 -i 选项或 :r 命令指定 sqlcmd 输入文件。可以使用 -o 选项或 :Error:Out:Perftrace 命令指定输出文件。以下是使用这些文件的一些原则:

    • :Error:Out:Perftrace 应使用不同的 <filename>。如果使用了相同的 <filename>,这些命令的输入可能会混杂在一起。
    • 如果从本地计算机的 sqlcmd 调用远程服务器上的输入文件,并且该文件包含驱动器文件路径(如 :out c:\OutputFile.txt),将在本地计算机而不是远程服务上创建输出文件。
    • 有效的文件路径包括:C:\<filename>、\\<服务器>\<共享$>\<filename> 和 "C:\Some Folder\<file name>"。如果路径中包含空格,请使用引号。
    • 每个新的 sqlcmd 会话都将覆盖现有的同名文件。

    信息性消息

    sqlcmd 将输出由服务器发送的所有信息性消息。在以下示例中,执行 Transact-SQL 语句后会输出信息性消息。

    在命令提示符下键入以下内容:

    DE>sqlcmdDE>

    DE>At the sqlcmd prompt type:DE>

    DE>USE AdventureWorks;DE>

    DE>GODE>

    按下 Enter 时,会输出以下信息性消息:“已将数据库上下文改为 'AdventureWorks'。”

    Transact-SQL 查询的输出格式

    sqlcmd 首先输出列标题,其中包含在选择列表中指定的列名。列名使用 SQLCMDCOLSEP 字符分隔。默认情况下,将使用空格。如果列名短于列宽,则使用空格填充输出,直到下一列。

    此行将跟随一行分隔行,分隔行是一系列的破折号字符。以下输出显示了一个示例。

    启动 sqlcmd。在 sqlcmd 命令提示符下键入以下内容:

    DE>USE AdventureWorks;DE>

    DE>SELECT TOP (2) ContactID, FirstName, LastName DE>

    DE>FROM Person.Contact;DE>

    DE>GO DE>

    按下 Enter 时,会返回以下结果集。

    DE>ContactID FirstName LastName DE>

    DE>----------- ------------ ----------DE>

    DE>1 Syed AbbasDE>

    DE>2 Catherine AbelDE>

    DE>(2 row(s) affected)DE>

    虽然 DE>ContactIDDE> 列只有 4 个字符宽,但已将其扩展以适应更长的列名。默认情况下,输出会在 80 个字符处终止。可通过使用 -w 选项或设定 SQLCMDCOLWIDTH 脚本变量来进行更改。

    XML 输出格式

    从 FOR XML 子句得到的 XML 输出是在连续流中的未格式化的输出。

    若要得到 XML 输出,请使用以下命令:DE>:XML ONDE>。

    ms162773.note(zh-cn,SQL.100).gif注意:
    sqlcmd 将采用常见的格式返回错误消息。请注意,XML 文本流中的错误消息还将采用 XML 格式输出。如果使用 DE>:XML ONDE>,则 sqlcmd 不显示信息性消息。

    若要关闭 XML 模式,请使用以下命令:DE>:XML OFFDE>。

    发出 XML OFF 命令之前不应显示 GO 命令,因为 XML OFF 命令会将 sqlcmd 切换回面向行的输出。

    XML(流形式)数据和行集数据不能混合。如果在执行输出 XML 流的 Transact-SQL 语句之前未发出 XML ON 命令,则输出将为乱码。如果已发出 XML ON 指令,则无法执行输出常规行集的 Transact-SQL 语句。

    ms162773.note(zh-cn,SQL.100).gif注意:
    :XML 命令不支持 SET STATISTICS XML 语句。
    sqlcmd Utility详解 - 创新远大 - 创新远大  sqlcmd 最佳方法

    使用以下方法来帮助实现最高的安全性和效率。

    • 使用集成安全性。
    • 在自动化环境中使用 -X
    • 使用适当的 NTFS 文件系统权限保护输入文件和输出文件。
    • 若要提高性能,请在一个 sqlcmd 会话中执行尽可能多的操作,而不是在一系列会话中来执行这些操作。
    • 将批处理或查询执行的超时值设置为大于您所预期的值。
  • 相关阅读:
    【反射】Java反射机制
    Composer教程之常用命令
    Composer教程之基础用法
    Composer教程之初识Composer
    Composer 的结构详解
    现代 PHP 新特性系列(七) —— 内置的 HTTP 服务器
    现代 PHP 新特性系列(一) —— 命名空间
    现代 PHP 新特性系列(二) —— 善用接口
    现代 PHP 新特性系列(三) —— Trait 概览
    现代 PHP 新特性系列(四) —— 生成器的创建和使用
  • 原文地址:https://www.cnblogs.com/jancco/p/2489123.html
Copyright © 2011-2022 走看看