sqlcmd参数命令全详解

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

SQL Server:sqlcmd参数命令全详解
2010-4-22 13:52:00

使用sqlcmd可以在批处理脚本中执行SQL,使用SQL的用户都对sqlcmd这个命令一点都不陌生。

今天我们就在这里给大家简要介绍以下几个主要的参数:

{ -U login_id [ -P password ] } | –E trusted connection }] 如果指定了-E就不需要指定用户名密码,当然指定了用户名密码就不用-E了;

-S server_name [ \ instance_name ] 数据库服务器,如果不在本机的话必须指定;

-d db_name 数据库名字,必须的;

[ -i input_file ] [ -o output_file ] sql存在文件里的话用-i,输出到文件用-o;

[ -q "cmdline query" ] [ -Q "cmdline query" and exit ] 输入是简单的sql,不用文件,推荐用-Q,如果你执行完sqlcmd还需要执行别的动作的话;

[ -W remove trailing spaces ] 删除多余的空格,结果会更紧凑。

当我们在真正的脚本中执行sql时,通常需要传入和输出变量。

传入变量比较简单,如下所示:

sqlcmd -d test -Q "select * from dbo.Investment where investor=$(x)" -v x='IBM' -W

这个语句从test数据库的Investment表中选出investor等于x的所有行,注意到变量x被包含在${}中。

然后用-v定义了x的值,'IBM'。

-W确定输出的结果不包含多余的空格。

x的值如果没有在sqlcmd中设定,系统会试图从别的地方去寻找,可能的地方包括,系统环境变量,用户环境变量,以及用在sqlcmd之前用set设定的变量值。

如果你的数据里确实包含${},那么你并不希望进行变量的替换,使用-x选项可以禁止变量的替换。

有些时候,你还希望能获得sql执行结果并保存到变量中。比如你们的日志系统每天都在产生日志文件,你要执行一个脚本来处理这些日志文件并存到数据库中。在处理之前,你必须读取数据库以确定上次处理到那一天了。你期望这样能解决你的问题:

sqlcmd -d test -Q "select ${x}=max(date) from dbo.logDates " -W

但这样并不工作。因为sqlcmd并不提供输出变量。

不过你可以这样做:

sqlcmd -d test -Q "declare @x nvarchar(8);select @x=max(date) from dbo.logDates;print @x; " -W

这样你就可以得到一个干干净净的数字,而不会包含列名和其他信息。

接着你将上述结果导入到一个文件里:

sqlcmd -d test -Q "declare @x nvarchar(8);select @x=max(date) from dbo.logDates;print @x; " -W >1.txt

现在到了最关键的一步,将文件的内容写入到变量里:

set /P myvar=<1.txt

/p表明这个变量myvar的值需要用户输入;

<1.txt表明从1.txt中读入而不是从其他地方读入。

这样,我们就巧妙的把sql执行的结果写入到变量里了



如何使用SQL Server 2005中的SQLCMD工具

发布时间:2008.02.29 05:01 来源:赛迪网 作者:林梦


1

、首先,你可以用SQLCMD来执行交互式动作,例如:

C:sqlcmd>sqlcmd

1> SELECT name from sys.databases

2> GO



同时你也可以试着键入如下命令:

1>:ServerList

SERVERS:
WUYZ
1>


如果想看其他命令的使用,可以键入:Help /?


2、执行SQL脚本文件

然后,你可以在SQLCMD命令上加入参数I来执行SQL脚本文件,例如:

C:sqlcmd>sqlcmd -i test.sql


示例中的I选项允许你执行一个脚本文件,另外,你也可以指定O选项,把命令的输出导出到指定文件,当然,我们也可以在代码中指定输出的结果,例:

C:sqlcmd>sqlcmd
1> :out output.txt
2> :r test.sql


3、在脚本中使用变量

SQLCMD支持可以在脚本中接收用户传入的变量信息,如下面语句

SET NOCOUNT ON
Select $(Cols) from $(tablename)
GO


上面语句请求2个参数,我们可以通过指定相应的参数信息传给脚本,如下:

C:sqlcmd>sqlcmd -i test.sql -o Output.txt
-v cols="name,object_id,create_date" tablename="sys.objects"



以上的语句用途:执行TEST.SQL脚本文件,并把输出的信息输出到OUTPUT.TXT文件中,并分别指定了COLS,TABLENAME的参数值。


4、在脚本中设置变量的值

除了通过外部传入参数的值外,还可以在内部设置参数的值,如下面的例子:

e:sqlcmdbackuptemplate.sql
use master
backup database [$(db)] to disk='$(file)'

e:sqlcmdbackupsingle.sql
:setvar db msdb
:setvar file c:tempmsdb.bak
:r e:sqlcmdbackuptemplate.sql



假如你想知道当然定义了哪些变量,可以使用:listvar命令来显示:


主要命令汇总:

:r filename
:ServerList
:List
:Listvar
:Error filename | STDOUT | STDERR
:Out filename | STDOUT | STDERR
:Perftrace filename | STDOUT | STDERR
:Connect server[instance] [timeout] [user_name[password] ]
:On Error [exit | ignore]
:SetVar variable value
:Help:XML ON | OFF



主要环境变量汇总:

-a SQLCMDPACKETSIZE
-d SQLCMDDBNAME
-H SQLCMDWORKSTATION
-h SQLCMDHEADERS
-l SQLCMDLOGINTIMEOUT
-m SQLCMDERRORLEVEL
-P SQLCMDPASSWORD
-S SQLCMSSERVER
-s SQLCMDCOLSEP
-t SQLCMDSTATTIMEOUT
-U SQLCMDUSER
-w SQLCMDCOLWIDTH


(责任编辑:卢兆林)

2.9 SqlCmd 命令行工具程序

SQL Server 2005 提供了非常多的命令行工具程序,例如大量输出入数据的 bcp.exe、分析性能的 dta.exe、与 SSIS 相关的 dtexec.exe、dtutil.exe、与 Reporting Services 相关的 rs.exe、rsconfig.exe、rskeymgmt.exe等等。我们在此仅介绍新版增加的、利用命令提示符执行 T-SQL 语法的工具程序 SqlCmd.exe。其他的工具程序你可以参考在线帮助“工具与公共程序参考”-“命令提示符公共程序”节点下的内容。

sqlcmd 通过 OLE DB 数据访问界面与 SQL Server 数据引擎沟通,可以让用户互动地执行 SQL 语法,或是指定 T-SQL 脚本文件交互

执行,可以周期性在后台批处理地执行,一些日常营运维护的工作将会需要此种方式完成。当你想要利用 SQL Server 2005 保留的“专用管理连接线(Dedicated Administrator Connection DAC)接到 SQL Server 时,也一定要通过 SqlCmd.exe 命令行工具程序。

在先前的版本若 SQL Server 实例的资源用尽,管理员无法利用任何方式创建新的连接以进入 SQL Server 实例做补救的操作,例如,杀掉一些耗资源的连接工作。在这一版可以通过 SqlCmd 使用 SQL Server 2005 保留的“专用管理员连接”,完成一些补救或清除的工作。SQL Server 2005 会为“专用管理员连接”保有专属的资源,让该条连接一定可以成功地访问 SQL Server 实例,但只保有一条连接的资源,所以你不可能同时建立两条“专用管理员连接”。

SQL Server 2005 仍完整支持前版的 osql 工具程序来连接到 SQL Server 2005。不过,必须利用 SQL Server 2005 所提供的 osql 版本来执行新的功能。若你使用 SQL Server 2000 所提供的 osql 访问 SQL Server 2005,则只能执行与旧版兼容的功能,而部分新功能将无法使用。

在通过 SqlCmd 登录与执行 T-SQL 语法之前,有相当多的选择参数可用,你可以在命令提示行输入如下的语法:

SqlCmd/?

以获得如下的参数说明画面:

图2-30 查看 SqlCmd 工具程序所提供的多种参数


从图2-30中看到 SqlCmd 工具程序可接受的参数是大小写有别的,在此举几个常用的参数列表说明如表2-3所示,至于完整的帮助,你可以参照在线帮助的“工具和公用程序参考”-“命令提示符公用程序”-“sqlcmd 公用程序”节点:

表2-3 SqlCmd 经常搭配使用的参数
参数与设置格式
说明

?
显示如图2-30 的简单说明画面

A
利用SQL Server 2005为管理者保留的“专用管理员连接(DAC)”来登录。

d数据库名
使用SQL Server信任的Windows账号来登录,不需要设置用户账号/密码,默认采用此选项。

E
使用 SQL Server 信任的 Windows 账号登录需设置用户账号/密码,默认采用此选项。

i 输入文件名[, 文件名2...]
设置包含SQL 表达式的纯文本文件,通过 SqlCmd 执行。可以同时指定多个文件,文件名称之间不能有空格。SqlCmd 会依照顺序来读取和处理,并在执行前先检查指定的文件是否全部存在。如果有一个以上文件不存在,sqlcmd 会结束操作。

O输出文件名
接收 sqlcmd 输出的文件。如果有指定文件 u参数,输出文件会以 Unicode 格式存储。若文件名称包含空格,必须用引号括住。如果定义了无效的文件名称,则会产生错误信息并退出执行。

P 密码
搭配 U 所指定的帐号所使用的密码。如果没有指定 -U 和 -P 这两个选项,sqlcmd 会利用当前用户

的 Windows 账号来连接 SQL Server 实例。

Q “SQL 语法”
功能与下面的 q 相同,只是执行完查询后会自动关闭 sqlcmd 应用程序。

q “SQL 语法”
启动 sqlcmd 连线后连接查询,但查询完成不退出 sqlcmd。你可以简单地直接执行如下的语法:

sqlcmd –q “select * from Northwind.dbo.Customers”

这代表以 SQL Server 信任的Windows 账号登录本机的默认实例,直接执行 Northwind 数据库内的 Customers 数据表查询。

S 服务器名[\实例名]
指定要连接SQL Server 实例,如果未指定此选项sqlcmd 会连接本机的默认实例。

U SQL_Server_账号
指定 SQL 自身的登录账号

v 变量名称=“值” [ 变量名称=“值”...]
定义 sqlcmd 所载装的脚本文件所定义的变量。如果设置值包含字元,则需要用引号括住该值。可同时指定多个 变量= “值” 的配对。如果指定的任何值发生错误,sqlcmd 会产生报错信息并退出执行。


进入到 SqlCmd 公用程序后,会以数字编号搭配大于符号(>)当作命令提示符。顺序创建的数字代表你曾经下了几个命令,而 GO 命令会把累积下来可执行的 SQL 命令传递到服务器端,并返回结果。简单的使用范例如图2-31所示。


图2-31 通过 SqlCmd 工具程序连接 SQL Server 实例并执行命令


在图2-31中,笔者先通过 sqlcmdeditor 环境变量设置 SqlCmd 工具程序可以调用的文字编辑程序,接着执行 SqlCmd 工具程序,以集成验证的方式登录本机默认实例后,先下一个 SQL 命令:

use northwind

接着通过 ED 命令,可以打开先前以环境变量设置的 Notepad 编辑程序。在 Notepad 内编写如图2-31中,位于 ED 之后的 SQL 命令,保存退出后 SqlCmd 会将文件的内容重新读回到命令提示行上。最后利用 GO 命令将先前编写但存放在缓冲区内的语法一起传给 SQL Server 实例。

上述范例中除了在命令提示符执行 SQL 语法外,还可以调用该工具程序提供的一些命令,而通常这些命令前需要加上冒号(:),有部分命令为了与之前版本 osql 兼容,可以省略冒号。在表2-4中以中括号括起冒号的,就是使用时冒号可省略的命令。

这些命令必须在行首,且以个别单行执行,命令后面不能有 T-SQL 或其他命令。而这些命令都不分大小写。表2-4列出常用的命令:

表 2-4 常用的 SqlCmd 所提供之功能指令
命令格式
说明

[:] !!<命令提示行命令>
执行作操作系统提示行命令或可执行文件。如

!! dir C:\

:Connect 服务器[\实例名称] [-l 连接超时] [-U SQL Server 账号 [-P 密码]]
关闭目前的连接,重新登录到其他的 SQL Server 实例。

[:] ED
启动文字编辑器,以编辑目前在缓冲区中的批处理文件,或之前执行过的批处理文件。若要编

辑前次执行过的批处理文件,须在该批处理文件执行完成之后立刻输入 ED 命令。

文字编辑器由SQLCMDEDITOR 系统环变量来定义。默认是古老的 [1]。

GO [n]
将缓存的表达式以单一批处理文件一起传递到 SQL Server 实例行 n 次。

:Help
列出各 sqlcmd 命令的简单说明。

[:] RESET
清除之前已经缓存的表达式。

:Serverlist
列出在网络上可获得的 SQL Server 服务实例的名称。

[:] QUIT
结束并退出SqlCmd 工具程序


另外,SqlCmd 支持 T-SQL 语法文件包容变量,让你可以有弹性地重复使用 T-SQL 语法文件,这是以往 osql 工具程序办不到的。在 T-SQL 语法文件中可以下述的格式定义变量:

$(变量名称)

我们写一段简单的 T-SQL 语法如下,其中定义了两个变量 colname 和 tabname:

USE Northwind


SELECT $(colname)

FROM $(tabname)

另外用 Windows 命令底层(Command Shell)的指令语法编写批次文件来测试,范例程序代码2-4所示:

程序代码列表 2-4 通过底层的指令语法编写批次文件测试 SqlCmd 工具程序

@ECHO OFF

CLS

@ECH通过以下的 SqlCmd 选项执行

@ECHO i 输入 sql 文件名

@ECHO o 输出结果文件名

@ECHO 设置参数内容

@ECHO E 综合式验证登录

@ECHO 设置服务实例

@ECHO __________________________________________________

IF DEFINED Instance GOTO Instance


@ECHO ------------连接到本机默认实例--------------

@ECHO sqlcmd -isqlcmd.sql -oCustomers.log -vcolname=“CompanyName,ContactName” tabname=“Customers” -E


sqlcmd -isqlcmd.sql -oCustomers.log -vcolname=“CompanyName,ContactName” tabname=“Customers” -E

@ECHO ERRORLEVEL: %ERRORLEVEL%

PAUSE

@ECHO __________________________________________________

@ECHO --------------------用环境变量--------------------

@ECHO SET colname=*

@ECHO SET tabname=Orders

@ECHO sqlcmd -i sqlcmd.sql -oOrders.log -E


SET colname=*

SET tabname=Orders

sqlcmd -i sqlcmd.sql -oOrders.log -E


@ECHO ERRORLEVEL: %ERRORLEVEL%

GOTO End


:Instance


@ECHO --------------连接到指定实例:%Instance%--------------

@ECHO sqlcmd -S%Instance% -isqlcmd.sql -oCustomers.log -vcolname=“CompanyName,ContactName” tabname=“Customers” -E


sqlcmd -S%Instance% -isqlcmd.sql -oCustomers.log -vcolname=“CompanyName,ContactName” tabname=“Customers” -E

@ECHO ERRORLEVEL: %ERRORLEVEL%

PAUSE

@ECHO __________________________________________________

@ECHO --------------------用环境变量--------------------


@ECHO SET colname=*

@ECHO SET tabname=Orders

@ECHO sqlcmd -S%Instance% -i sqlcmd.sql -oOrders.log -E


SET colname=*

SET tabname=Orders


sqlcmd -S%Instance% -i sqlcmd.sql -oOrders.log -E

@ECHO ERRORLEVEL: %ERRORLEVEL%


:End

@ECHO 执行完毕

PAUSE

在范例中一开始便利用底层指令的 IF DEFINED 语法来测试我们自行定义的 Instance 环境变量是否存在,以决定程序逻辑的走向。

在范例中,通过 -i 菜单指定先前编写并保存的 T-SQL 指令文件 sqlcmd.sql,并以 -o 选项设置将执行结果输出至存放的文本文件。以 -E 选项设置登录验证的方式采用 Windows综合验证。由于笔者的机器上有两个 SQL Server 实例,因此再通过自行定义的 Instance 环境变量来决定连接的实例,若有定义 Instance 环境变量,则需要再利用 -S 选项设置连接的实例名称。

当然,整个范例中最大的特色是如何设置 T-SQL 指令文件中的变量部分,程序代码列表2-4 分别列举了两种方式,一是通过 -v 选项搭配变量名称以及值的配对来设置,另一种是取与 T-SQL 指令文件中变量相同名称的系统环境变量,赋予值后直接调用 sqlcmd 装载该指令文件即可。

SqlCmd 程序执行完毕后,可以查看系统环境变量 ERRORLEVEL,若返回值为 0 代表执行结果无误,若值不等于 0,则代表有错误发生,程序代码列表2-4的执行结果如图2-32所示:


图2-32 程序代码列表2-4 的执行结果


由于笔者在程序代码列表2-4中使用了底层命令的 Pause,因此你在执行过程中会需要按下任意键后才会继续执行。执行完毕后,你可以通过 Notepad 工具程序打开 Customers.log 和 Orders.log 两个普通文本文件,观察通过变量设置 T-SQL 语法内容的执行结果。

通过如上的批次执行方式,你可以在安装或维护日常 SQL Server 数据库时,周期地以后台的方式执行,而后查看执行记录来得知维护工作的结果。

最后,若你有兴趣看看被系统隐藏起来的对象,可以在任意的数据库内执行如下的语法:

select * from sys.objects where type='s'

将会发现一大堆系统数据表名称,其 schema 名称为 sys。但在一般的连接内,都无法看到这些数据表,若直接查询会得到如下的报错信息:

信息 208,级别 16,状态 1,行 1

无效的对象名称 'sys.sysfiles1'。

这时,你就可以通过 SqlCmd 工具程序搭配 -A 参数连接到 SQL Server 服务实例,便能够查看这些系统数据表。

另外,不晓得你是否注意到 SQL Server 服务实例启动时,所输出的 Log 会有一行如下的信息:

2005-12-23 14:05:52.75 spid5s Starting up database 'mssqlsystemresource'.

当你到存放数据库文件的目录下,默认的路径:

C:\Program Files\Microsoft SQL Server\MSSQL.n\MSSQL\D

ata

也会看到 mssqlsystemresource.mdf 和 mssqlsystemresource.ldf 两个数据库文件。但在任何环境都看不到这个系统数据库,包括普通单纯的 SqlCmd -A 模式也不行。

SQL Server 2005 新增了一个存放系统对象的数据库,如系统视图表、存储过程等,其名称叫 mssqlsystemresource。由于系统对象统一放在这个数据库内,再对应给其他数据库使用,因此以后改版,上 Service Pack 时,只要换掉这个数据库即可。

若你有兴趣研究该数据库,可以先将 SQL Server 服务实例停止执行,而后复制mssqlsystemresource.mdf 和 mssqlsystemresource.ldf 两个数据库文件。在此,笔者分别命名为 Copy_Resource.mdf 和 Copy_Resource.ldf,而后重新启动 SQL Server 服务实例,并通过如程序代码列表2-5的 T-SQL 语法将该复制的数据库文件附加成另一个数据库,以后就可以研究其内部了 J

程序代码列表2-5 附加资源数据库以供研究各种系统对象的设计方式

DECLARE @path NVARCHAR(200),@mdf NVARCHAR(200),@ldf NVARCHAR(200)

SELECT @path=REPLACE(filename,'master.mdf','') FROM sys.sysfiles WHERE fileid=1

SET @mdf=@path + N'Copy_Resource.mdf'

SET @ldf=@path + N'Copy_Resource.ldf'

EXEC sp_attach_db 'CopyResource',@mdf,@ldf

除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 |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 的一个实例。同时关闭当前的连接。
超时选项:
0
永远等待
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 indexde

l 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>
将来自通过 所指定文件的其他 Transact-SQL 语句和 sqlcmd 命令分析到语句缓存中。
注意:
系统会相对于sqlcmd 在其中运行的启动目录读取
当遇到批处理终止符之后,将读取并执行该文件。可以发出多个 :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 命令设置的脚本变量。

来自: /wuliao578/blog/item/550bb4cf36632a1b00e928fb.html

相关文档
最新文档