基于sqlcmd命令行工具管理SQL server

在SQL Server数据库当中,除了大家熟知的基于SSMS来管理SQL server数据库之外,还有一个很强大的命令行工具sqlcmd。该命令行工具基本等同于Oracle SQL*Plus以及 MySQL命令提示符下以实现相关的运维管理工作。尤其是需要多个脚本执行的时候,sqlcmd便派上用场了。本文描述了sqlcmd的一些常规用法以及给出如何通过批处理方式执行脚本的示例。

一、获取sqlcmd帮助

C:\>sqlcmd -?
Microsoft (R) SQL Server Command Line Tool
Version 12.0.2000.8 NT   %当前版本为SQLserver2014 12.0%
Copyright (c) 2014 Microsoft. All rights reserved.

usage: Sqlcmd            [-U login id][-P password][-S server][-H hostname][-E trusted connection][-N Encrypt Connection][-C Trust Server Certificate][-d use database name][-l login timeout][-t query timeout][-h headers][-s colseparator][-w screen width][-a packetsize][-e echo input][-I Enable Quoted Identifiers][-c cmdend][-L[c] list servers[clean output]]
  [-q "cmdline query"][-Q "cmdline query" and exit][-m errorlevel][-V severitylevel][-W remove trailing spaces][-u unicode output][-r[0|1] msgs to stderr]
  [-i inputfile][-o outputfile][-z new password][-f <codepage> | i:<codepage>[,o:<codepage>]] [-Z new password and exit][-k[1|2] remove[replace] control characters]
  [-y variable length type display width][-Y fixed length type display width][-p[1] print statistics[colon format]]
  [-R use client regional setting][-K application intent][-M multisubnet failover][-b On error batch abort][-v var = "value"...][-A dedicated admin connection][-X[1] disable commands, startup script, environment variables [and exit]]
  [-x disable variable substitution][-? show syntax summary]

二、最常用的选项

服务器选项(-S),用于标识 sqlcmd 连接到的 Microsoft SQL Server 实例。
身份验证选项(-E、-U 和 -P),用于指定 sqlcmd 连接到 SQL Server 实例所使用的凭据。-E 选项为默认选项,毋须指定。

输入选项(-Q、-q 和 -i),用于标识 sqlcmd 输入的位置。
输出选项 (-o),用于指定 sqlcmd 输出所在的文件。

三、常见用法

使用 Windows 身份验证连接到默认实例,以交互方式运行 Transact-SQL 语句:
        sqlcmd -S <ComputerName>

上述示例中,未指定 -E,因为它是默认选项,而且 sqlcmd 使用 Windows 身份验证连接到默认实例。

使用 Windows 身份验证连接到命名实例,以交互方式运行 Transact-SQL 语句:
        sqlcmd -S <ComputerName>\<InstanceName>  或者  sqlcmd -S .\<InstanceName>


使用 Windows 身份验证连接到命名实例,并指定输入和输出文件:
        sqlcmd -S <ComputerName>\<InstanceName> -i <MyScript.sql> -o <MyOutput.rpt>

使用 Windows 身份验证连接到本地计算机上的默认实例,执行查询,并在查询运行完毕后使 sqlcmd 保持运行状态:
        sqlcmd -q "SELECT * FROM AdventureWorks2012.Person.Person"

使用 Windows 身份验证连接到本地计算机上的默认实例,执行查询,将输出定向到某个文件,并在查询运行完毕后使 sqlcmd 退出:
        sqlcmd -Q "SELECT * FROM AdventureWorks2012.Person.Person" -o MyOutput.txt

使用 SQL Server 身份验证连接到命名实例,以交互方式运行 Transact-SQL 语句,并由 sqlcmd 提示输入密码:
        sqlcmd -U MyLogin -S <ComputerName>\<InstanceName>

四、交互用法

交互方式,在请在未使用 -Q、-q、-Z 或 -i 选项指定任何输入文件或查询的情况下运行实用工具。
        例如:sqlcmd -S <ComputerName>\<InstanceName>

交互方式2个常用的命令
        GO + Enter   : 将语句发送到SQLserver服务器并执行
        Exit 或 QUIT : 退出sqlcmd命令行工作方式
        :REST        : 清除语句缓存,键入 ^C 将使 sqlcmd 退出,在发出 GO 命令后,还可以用 ^C 停止语句缓存的执行。
        :ED          : 使用编辑器编写SQL

示例      
        C:\>sqlcmd -U sa -P Sqlserve -H HQ1636
        1> use testdb;
        2> go
        已将数据库上下文更改为 'testdb'。
        1> select * from t2;
        2> go
        id          id2         ename
        ----------- ----------- -------------------
                  1           1 NULL
                  1        NULL NULL
                  1           2 John

        (3 rows affected)
        1> exit

五、使用sqlcmd运行SQL脚本

这个是比较管用的。对于熟悉Oracle SQL*Plus或者MySQL命令行的童鞋来说,有这个工具执行脚本,尤其是多个脚本需要执行的情绪,那个爽啊,不说了,直接看用法。

1、执行单个脚本

相关推荐