sqlcmd命令⾏操作sqlserver
在SQLServer数据库当中,除了⼤家熟知的基于SSMS来管理SQLserver数据库之外,还有⼀个很强⼤的命令⾏⼯具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" -
使⽤ SQL Server ⾝份验证连接到命名实例,以交互⽅式运⾏ Transact-SQL 语句,并由 sqlcmd 提⽰输⼊密码:
sqlcmd -U MyLogin -S <ComputerName>\<InstanceName>
四、交互⽤法
交互⽅式,在请在未使⽤ -Q、-q、-Z 或 -i 选项指定任何输⼊⽂件或查询的情况下运⾏实⽤⼯具。
例如:sqlcmd -S <ComputerName>\<InstanceName>
交互⽅式2个常⽤的命令
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
----------- ----------- -------------------
11 NULL
1 NULL NULL
12 John
(3 rows affected)
1> exit
五、使⽤sqlcmd运⾏SQL脚本
这个是⽐较管⽤的。对于熟悉Oracle SQL*Plus或者MySQL命令⾏的童鞋来说,有这个⼯具执⾏脚本,尤其是多个脚本需要执⾏的情绪,那个爽啊,不说了,直接看⽤法。
1、执⾏单个脚本
脚本内容如下
C:\>type E:\temp\Testsql.sql
打开mysql服务命令USE testdb;
GO
SELECT * FROM t2;
GO
执⾏脚本
C:\>sqlcmd -U sa -P Sqlserve -H HQ1636 -i E:\temp\Testsql.sql -o E:\
C:\>type E:\
已将数据库上下⽂更改为'testdb'。
id id2 ename
----------- ----------- --------------------
11 NULL
1 NULL NULL
12 John
(3 rows affected)
2、通过专⽤管理连接使⽤sqlcmd
下⾯使⽤专⽤连接⽅式杀死特定的session
C:\>sqlcmd -U sa -P Sqlserve -H HQ1636 -A
1> SELECT blocking_session_id FROM sys.dm_exec_requests WHERE blocking_session_id<>0;
2> go
blocking_session_id
-------------------
54
(1 rows affected)
1> kill 54;
2> go
3、使⽤ sqlcmd 执⾏存储过程
C:\>type E:\temp\TestProc.sql
CREATE PROC proc_query_t2 @ename VARCHAR(20)
AS
SELECT *
FROM t2
WHERE ename = @ename;
GO
C:\>sqlcmd -U sa -P Sqlserve -H HQ1636 -i E:\temp\TestProc.sql
C:\>sqlcmd -U sa -P Sqlserve -H HQ1636
1> :setvar ename robin
1> exec testdb.dbo.proc_query_t2 $(ename)
2> go
----------- ----------- --------------------
11 Robin
(1 rows affected)
4、使⽤ sqlcmd 进⾏数据库⽇常管理
C:\>type E:\temp\DB_bak.sql
USE master;
GO
BACKUP DATABASE [$(db)] TO DISK='$(bakfile)'
C:\>sqlcmd -U sa -P Sqlserve -H HQ1636
1> :setvar db testdb
1> :setvar bakfile e:\temp\testdb01.bak
1> :r e:\temp\DB_bak.sql
已将数据库上下⽂更改为'master'。
1> go
已为数据库'testdb',⽂件'testdb' (位于⽂件1上)处理了368页。
已为数据库'testdb',⽂件'testdb_log' (位于⽂件1上)处理了5页。
BACKUP DATABASE 成功处理了373页,花费0.377秒(7.729 MB/秒)。
5、sqlcmd 对多个实例执⾏代码
2> :connect 192.168.1.194 -U robin -P xx
Sqlcmd: Successfully connected to server '192.168.1.194'.
1> select getdate()
2> go
-----------------------
2016-03-1713:31:16.390
(1 rows affected)
1> :connect 192.168.1.207,2433 -U sa -P 123
Sqlcmd: Successfully connected to server '192.168.1.207,2433'.
1> select getdate()
2> go
-----------------------
2016-03-1713:32:25.787
(1 rows affected)
6、使⽤批处理⽅式执⾏任务
这个对于运维的童鞋来说实在是幸福,可以将脚本封装到批处理.bat⽂件以及加到windows计划任务。C:\>type e:\temp\batch.bat
@echo off
sqlcmd -U sa -P Sqlserve -H HQ1636 -i e:\temp\all.sql -b -o e:\temp\out.log
C:\>type e:\temp\all.sql
:r e:\temp\driver.sql
:r e:\temp\hostinfo.sql
C:\>type e:\temp\hostinfo.sql
PRINT 'Below is host info.';
PRINT '=================================';
USE [master];
GO
EXEC xp_msver;
GO
C:\>type e:\temp\driver.sql
PRINT 'Below is drive info.';
PRINT '=================================';
USE master;
GO
EXEC xp_fixeddrives;
GO
C:\>e:\temp\batch.bat %执⾏批处理脚本%
Below is drive info.
=================================
已将数据库上下⽂更改为'master'。
drive MB 可⽤空间
-
---- -----------
D 138623
E 26783
F 217172
(4 rows affected)
Below is host info.
=================================
已将数据库上下⽂更改为'master'。
Index Name Internal_Value Character_Value
------ -------------------------------- -------------- --------------------------------------------------
1 ProductName NULL Microsoft SQL Server
2 ProductVersion 78643212.0.2000.8
3 Language 2052中⽂(简体,中国)
4 Platform NULL NT x64
5 Comments NULL SQL
6 CompanyName NULL Microsoft Corporation
7 FileDescription NULL SQL Server Windows NT - 64 Bit
8 FileVersion NULL 2014.0120.2000.08 ((SQL14_RTM).140220-1752)
9 InternalName NULL SQLSERVR
10 LegalCopyright NULL Microsoft Corp. All rights reserved.
11 LegalTrademarks NULL Microsoft SQL Server is a registered trademark
12 OriginalFilename NULL SQLSERVR.EXE
13 PrivateBuild NULL NULL
14 SpecialBuild 131072008 NULL
15 WindowsVersion 1310720086.1 (7601)
16 ProcessorCount 44
17 ProcessorActiveMask NULL f
18 ProcessorType 8664 NULL
19 PhysicalMemory 1629716297 (17088618496)
20 Product ID NULL NULL
————————————————
原⽂链接:blog.csdn/leshami/java/article/details/50913475
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论