2.9SqlCmd命令行工具程序_SQLServer2005数据库开发详解

来源:微软认证    发布时间:2012-11-08    微软认证视频    评论

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 系统环变量来定义。默认是古老的 edit.com[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 指令文件中的变量部分,程序代码列

视频学习

我考网版权与免责声明

① 凡本网注明稿件来源为"原创"的所有文字、图片和音视频稿件,版权均属本网所有。任何媒体、网站或个人转载、链接转贴或以其他方式复制发表时必须注明"稿件来源:我考网",违者本网将依法追究责任;

② 本网部分稿件来源于网络,任何单位或个人认为我考网发布的内容可能涉嫌侵犯其合法权益,应该及时向我考网书面反馈,并提供身份证明、权属证明及详细侵权情况证明,我考网在收到上述法律文件后,将会尽快移除被控侵权内容。

最近更新

社区交流

考试问答