sql 2005 SqlCmd命令
除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 命令设置的脚本变量。