• 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 会话中执行尽可能多的操作,而不是在一系列会话中来执行这些操作。
    • 将批处理或查询执行的超时值设置为大于您所预期的值。
  • 相关阅读:
    10.27 模拟赛
    bzoj 1504 郁闷的出纳员
    Codeforces 633H. Fibonacci-ish II
    悼念512汶川大地震遇难同胞——珍惜现在,感恩生活(部分背包)
    FATE(完全背包)
    Piggy-Bank(完全背包)
    Coloring Brackets (区间DP)
    Food Delivery (区间DP)
    You Are the One (区间DP)
    Brackets(区间DP)
  • 原文地址:https://www.cnblogs.com/jancco/p/2489123.html
Copyright © 2020-2023  润新知