执行“sqlcmd”命令行工具

日期: 2010-12-26 作者:Ray RankinsPaul T. BertucciChris GallelliAlex T. Silverstein翻译:冯昀晖 来源:TechTarget中国 英文

“sqlcmd”命令行工具是“isql”和“osql”工具(你可以在以前的SQL Server版本中使用这两个工具)的下一代工具。它提供了与“isql”和“osql”相同类型的功能,包括从命令提示行连接到SQL Server并执行T-SQL的功能。T-SQL命令可以被存储在脚本文件中,交互式输入,或者指定为“sqlcmd”命令行参数。   “sqlcmd“语法如下:   sqlcmd   [{ { -U login_id [ -P password ] } | –E trusted&n……

我们一直都在努力坚持原创.......请不要一声不吭,就悄悄拿走。

我原创,你原创,我们的内容世界才会更加精彩!

【所有原创内容版权均属TechTarget,欢迎大家转发分享。但未经授权,严禁任何媒体(平面媒体、网络媒体、自媒体等)以及微信公众号复制、转载、摘编或以其他方式进行使用。】

微信公众号

TechTarget微信公众号二维码

TechTarget

官方微博

TechTarget中国官方微博二维码

TechTarget中国

电子邮件地址不会被公开。 必填项已用*标注

敬请读者发表评论,本站保留删除与本文无关和不雅评论的权力。

“sqlcmd”命令行工具是“isql”和“osql”工具(你可以在以前的SQL Server版本中使用这两个工具)的下一代工具。它提供了与“isql”和“osql”相同类型的功能,包括从命令提示行连接到SQL Server并执行T-SQL的功能。T-SQL命令可以被存储在脚本文件中,交互式输入,或者指定为“sqlcmd”命令行参数。

  “sqlcmd“语法如下:

  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, environment variables [and exit]
  [ -? show syntax summary ]

  “sqlcmd”命令支持的选项比较广泛,但是对于基本操作来说其中许多选项不是必须的。为了演示这一工具的强大,我们来看看下面几个关于“sqlcmd”工具的例子,从非常简单的(只使用很少选项的)到采用更多选项的例子都有。

  执行“sqlcmd”工具

  在我们开始进入示例之前,记住一点很重要,“sqlcmd”可以有几种不同的运行方式。它可以在交互式的命令提示符中运行,也可以在批处理文件中运行,也可以从SSMS中的查询编辑窗口中运行。在交互式运行时,“sqlcmd”程序的名称要输入到命令提示符中,并带上连接数据库服务器需要的选项参数。连接建立之后,就会有带有编号的行用来输入T-SQL命令。多行T-SQL可以成批输入;它们只会在输入“GO”命令之后才执行。图5.1展示了一个示例,其中使用了两个简单的“SELECT”语句,它们被“sqlcmd”交互式执行。本例中的这个连接是通过在命令提示符中键入“sqlcmd”来向默认SQL Server实例建立信任连接的,该实例运行在打开命令行窗口的计算机上。

  图5.1 交互式执行“sqlcmd”

   

  在SQL Server 2005的SSMS中,增加了编辑和执行“sqlcmd”脚本的功能。一份“sqlcmd”脚本可以利用SSMS在查询编辑窗口中打开或者创建。要编辑这些脚本,你必须把编辑器设置为“SQLCMD”模式。你可以通过选择“查询”,“SQLCMD”模式或者点击工具条上的相关按钮来做到这一点。当编辑器被设置为SQLCMD模式时,它会提供代码着色以及解析和执行脚本中命令内容的功能。图5.2展示了一个“sqlcmd”脚本示例,该脚本被在SSMS中设置为“SQLCMD”模式的查询编辑窗口中打开了。有阴影的行都是“sqlcmd”命令。

  图5.2 在SSMS中执行和编辑“sqlcmd”脚本。

   

  执行“sqlcmd”工具最常用的手段就是通过批处理文件执行。这种方法可以提供很大的自动化便利,因为它使你可以通过运行一个文件执行一个脚本或者许多脚本。本部分内容展示的示例是专门针对以这种方式执行“sqlcmd”的情况。下面这个简单的例子展示了“sqlcmd”的执行,它利用信任连接来连接到本地数据库,然后使用“-Q”选项执行了一个简单的查询:

  sqlcmd -S (local) -E -Q”select getdate()”

  你可以扩展这个例子,添加输出文件来存储查询结果,增加“-e”选项来把执行的查询语句也显示到输出结果中。

  sqlcmd -S (local) -E -Q”select getdate()” -o c:TestOutput.txt –e

  “c:TestOutput.txt”的文件内容看起来应该是这样的:

  select getdate()

  – – – – – – – – – – – -

  2008-09-10 20:29:05.645

  (1 rows affected)

  利用信任连接不是使用“sqlcmd”连接到SQL Server实例的唯一方式。你可以利用“-U”和“-P”命令行参数来指定SQL Server用户和密码。“sqlcmd”还提供一个选项来在名为“sqlcmdPASSWORD”的环境变量中指定密码,它可以在“sqlcmd”执行前被复制,这样就不需要在批处理文件中硬编码了。

  “sqlcmd”还提供了向服务器建立管理员专用连接DAC的方式。DAC通常用来诊断有问题的服务器。它允许管理员在其他人可能无法登陆时登陆到服务器。如果服务器上的DAC功能启用了,可以通过“-A”选项建立连接并行运行查询,如下面的例子所示:

  sqlcmd -S (local) -A -Q”select getdate()”

  如果你需要管理更复杂的T-SQL执行,那么把TSQL存储到单独的输入文件可能会更容易一些。输入文件然后可以被“sqlcmd”参数所引用。例如,假定你有如下的“T-SQL”存储在名为“C:TestsqlcmdInput.sql”的文件中:

  C:TestsqlcmdInput.sql:

  BACKUP DATABASE Master

  TO DISK = ‘c:master.bak’

  BACKUP DATABASE Model

  TO DISK = ‘c:model.bak’

  BACKUP DATABASE MSDB

  TO DISK = ‘c:msdb.bak’

  “sqlcmd”执行会接收“ C:TestsqlcmdInput.sql”文件作为输入并执行文件中的命令。看起来像这样:

  sqlcmd -S (local) -E -i”C:TestsqlcmdInput.sql” -o c:TestOutput.txt –e

  在前面的例子中执行了对三个系统数据库的备份,并把结果写到了指定的输出文件中。

相关推荐