当前位置:文章写作网 >日记 >日记 >sql 2005 SqlCmd命令

sql 2005 SqlCmd命令

2008-04-25 11:48 作者:tshfang 阅读量:12677 推荐17次 | 我要投稿

除sqlcmd 中的 Transact-SQL 语句之外,还可使用命令。

一、当使用 sqlcmd 命令时,请记住下列事项:

1、除 GO 以外,所有 sqlcmd 命令必须以冒号 (:) 为前缀。

2、sqlcmd 命令只有出现在一行的开头时,才能够被识别。

3、所有 sqlcmd 命令都不区分大小写。

4、每个命令都必须位于单独的行中。命令后面不能跟随 Transact-SQL 语句或其他命令。

二、命令介绍

1、GO [count]

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

例如:

1> select top 1 * from sys.sysobjects

2> go 2

name id xtype uid info status base_schema_ver replinfo

parent_obj crdate ftcatid schema_ver stats_schema_ver type userstat sysstat indexdel refdate version deltrig instrig updtrig seltrig category

cache

-------------------------------------------------------------------------------------------------------------------------------- ----------- ----- ------ ------ ----------- --------------- -----------

----------- ----------------------- ------- ----------- ---------------- ---- -------- ------- -------- ----------------------- ----------- ----------- ----------- ----------- ----------- -----------

------

sysrowsetcolumns 4 S 4 0 0 0 0

0 2005-10-14 01:36:15.923 0 0 0 S 1 1 0 2005-10-14 01:36:15.923 0 0 0 0 0 2

0

(1 行受影响)

name id xtype uid info status base_schema_ver replinfo

parent_obj crdate ftcatid schema_ver stats_schema_ver type userstat sysstat indexdel refdate version deltrig instrig updtrig seltrig category

cache

-------------------------------------------------------------------------------------------------------------------------------- ----------- ----- ------ ------ ----------- --------------- -----------

----------- ----------------------- ------- ----------- ---------------- ---- -------- ------- -------- ----------------------- ----------- ----------- ----------- ----------- ----------- -----------

------

sysrowsetcolumns 4 S 4 0 0 0 0

0 2005-10-14 01:36:15.923 0 0 0 S 1 1 0 2005-10-14 01:36:15.923 0 0 0 0 0 2

0

(1 行受影响)

1>

可以看出,执行go 2以后,缓存中的语句被执行了2次。

2、:List

打印语句缓存的内容。

3、[:] RESET

清除语句缓存。

4、:Error <filename>|STDERR|STDOUT

将所有错误输出重定向到 filename 指定的文件、stderr 或 stdout。Error 选项可以在一个脚本中多次出现。默认情况下,错误输出将发送到 stderr。

filename

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

STDERR

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

STDOUT

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

例如:

1> go

1> aaa

2> :error d:\a.txt

2> go

我们看一下a.txt的内容:

消息 2812,级别 16,状态 62,服务器 FANGZQ,第 1 行

找不到存储过程 'aaa'。

5:[:] ED

启动文本编辑器。该编辑器可以用来编辑当前的批处理或上次执行的批处理。若要编辑上次执行的批处理,必须在上一批处理执行完之后立即键入 ED 命令。文本编辑器由 SQLCMDEDITOR 环境变量定义。默认编辑器为“Edit”。若要更改编辑器,请设置 SQLCMDEDITOR 环境变量。

右键我的电脑-属性-高级-环境变量 新建用户变量,变量名称是SQLCMDEDITOR,值是编辑器的位置,比如是记事本那么值应该是:

%SystemRoot%\system32\notepad.exe

如果想使SQL Server Management Studio编辑sqlcmd语句,可以这样设置值:"C:\Program Files\Microsoft SQL Server\90\Tools\Binn\VSShell\Common7\IDE\SqlWb.exe"

这样当输入ed命令时候打开的是编辑器是记事本。并且记事本中会有缓冲区中的语句。当关闭记事本的时候,记事本中的语句会自动显示到cmd中。很像oracle哦!

6、:Out < filename>| STDERR| STDOUT

将所有查询结果重定向到 filename 指定的文件、stderr 或 stdout。默认情况下,输出将发送到 stdout。

例如:

1> select count(*) from sys.sysobjects

2> :out d:\a.txt

2> go

1>

我们看一下a.txt的内容

-----------

48

(1 行受影响)

7、[:] !!

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

:!! Dir

注意:该命令在运行 sqlcmd 的计算机上执行。

8:Perftrace

:Perftrace < filename>| STDERR| STDOUT

将所有性能跟踪信息重定向到 filename 指定的文件、stderr 或 stdout。默认情况下,性能跟踪输出将发送到 stdout。

9:[:] QUIT

sqlcmd 退出。

10、:Connect

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

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

超时选项:

永远等待

n>0

等待 n 秒钟

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

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

:connect myserver\instance1

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

:setvar myusername test

:setvar myservername myserver

:connect $(myservername) $(myusername)

11、[:] EXIT[ (statement) ]

允许您将 SELECT 语句的结果用作 sqlcmd 的返回值。第一个结果行的第一列转换为 4 字节的整数(长整型)。语法为::EXIT(query)

例如:

c:\Program Files\Microsoft SQL Server\90\NotificationServices\9.0.242\Bin>sqlcmd

1> use tempdb

2> exit(select top 1 * from sys.sysobjects)

已将数据库上下文更改为 'tempdb'。

name id xtype uid info status base_schema_ver replinfo

parent_obj crdate ftcatid schema_ver stats_schema_ver type userstat sysstat indexdel refdate version deltrig instrig updtrig seltrig category

cache

-------------------------------------------------------------------------------------------------------------------------------- ----------- ----- ------ ------ ----------- --------------- -----------

----------- ----------------------- ------- ----------- ---------------- ---- -------- ------- -------- ----------------------- ----------- ----------- ----------- ----------- ----------- -----------

------

sysrowsetcolumns 4 S 4 0 0 0 0

0 2005-10-14 01:36:15.923 0 0 0 S 1 1 0 2005-10-14 01:36:15.923 0 0 0 0 0 2

0

(1 行受影响)

c:\Program Files\Microsoft SQL Server\90\NotificationServices\9.0.242\Bin>

执行语句以后退出sqlcmd.

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

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

下面是 EXIT 格式的列表:

:EXIT

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

:EXIT( )

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

:EXIT(query)

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

12、:On Error

:On Error[ exit| ignore]

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

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

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

13、:r< filename>

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

注意:

系统会相对于sqlcmd 在其中运行的启动目录读取 <filename>。

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

注意:

每遇到一个 :r 命令,交互模式下显示的行计数都会加一。:r 命令会出现在 list 命令的输出中。

例如:

d盘中的a.txt的内容如下:

use tempdb

go

select count(*) from sys.sysobjects

go

执行命令看一下:

c:\Program Files\Microsoft SQL Server\90\NotificationServices\9.0.242\Bin>sqlcmd

1> :r d:\a.txt

已将数据库上下文更改为 'tempdb'。

-----------

48

(1 行受影响)

1>

14、:Help

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

15、:ServerList

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

16、:XML [ON | OFF]

on 得到 XML 输出

off 关闭 XML 模式

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

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

:XML 命令不支持 SET STATISTICS XML 语句。

17、:Listvar

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

注意:

只显示由 sqlcmd 设置的脚本变量和使用 :Setvar 命令设置的脚本变量。

其他人在看啥

    《sql 2005 SqlCmd命令》的评论 (共 0 条)

    • Guest::cool
    • Guest::manfen
    • Guest::luguo