热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

sqlcmd命令行操作sqlserver

在SQLServer数据库当中,除了大家熟知的基于SSMS来管理SQLserver数据库之外,还有一个很强大的命令行工具sqlcmd。该命令行工具基本等同于OracleSQL*Pl

在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  | i:[,o:]] [-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 

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

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


使用 Windows 身份验证连接到命名实例,并指定输入和输出文件:
sqlcmd -S \ -i  -o 

使用 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 \

四、交互用法

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

交互方式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
已将数据库上下文更改为 testdb1> 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、执行单个脚本

脚本内容如下
C:\>type E:\temp\Testsql.sql
USE testdb;
GO
SELECT * FROM t2;
GO

执行脚本
C:\>sqlcmd -U sa -P Sqlserve -H HQ1636 -i E:\temp\Testsql.sql -o E:\temp\Testresult.txt

C:\>type E:\temp\Testresult.txt
已将数据库上下文更改为 testdb。
id id2 ename
----------- ----------- --------------------
1 1 NULL
1 NULL NULL
1 2 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
id id2 ename
----------- ----------- --------------------
1 1 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
已将数据库上下文更改为 master1> 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-17 13: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-17 13: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 可用空间 
----- -----------
C 99784
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 786432 12.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 131072008 6.1 (7601) 
16 ProcessorCount 4 4 
17 ProcessorActiveMask NULL f 
18 ProcessorType 8664 NULL 
19 PhysicalMemory 16297 16297 (17088618496) 
20 Product ID NULL NULL 

————————————————
原文链接:https://blog.csdn.net/leshami/java/article/details/50913475

sqlcmd命令行操作sql server


推荐阅读
  • 在说Hibernate映射前,我们先来了解下对象关系映射ORM。ORM的实现思想就是将关系数据库中表的数据映射成对象,以对象的形式展现。这样开发人员就可以把对数据库的操作转化为对 ... [详细]
  • 高质量SQL书写的30条建议
    本文提供了30条关于优化SQL的建议,包括避免使用select *,使用具体字段,以及使用limit 1等。这些建议是基于实际开发经验总结出来的,旨在帮助读者优化SQL查询。 ... [详细]
  • CentOS 7部署KVM虚拟化环境之一架构介绍
    本文介绍了CentOS 7部署KVM虚拟化环境的架构,详细解释了虚拟化技术的概念和原理,包括全虚拟化和半虚拟化。同时介绍了虚拟机的概念和虚拟化软件的作用。 ... [详细]
  • 本文介绍了lua语言中闭包的特性及其在模式匹配、日期处理、编译和模块化等方面的应用。lua中的闭包是严格遵循词法定界的第一类值,函数可以作为变量自由传递,也可以作为参数传递给其他函数。这些特性使得lua语言具有极大的灵活性,为程序开发带来了便利。 ... [详细]
  • 本文介绍了通过ABAP开发往外网发邮件的需求,并提供了配置和代码整理的资料。其中包括了配置SAP邮件服务器的步骤和ABAP写发送邮件代码的过程。通过RZ10配置参数和icm/server_port_1的设定,可以实现向Sap User和外部邮件发送邮件的功能。希望对需要的开发人员有帮助。摘要长度:184字。 ... [详细]
  • 动态规划算法的基本步骤及最长递增子序列问题详解
    本文详细介绍了动态规划算法的基本步骤,包括划分阶段、选择状态、决策和状态转移方程,并以最长递增子序列问题为例进行了详细解析。动态规划算法的有效性依赖于问题本身所具有的最优子结构性质和子问题重叠性质。通过将子问题的解保存在一个表中,在以后尽可能多地利用这些子问题的解,从而提高算法的效率。 ... [详细]
  • Java验证码——kaptcha的使用配置及样式
    本文介绍了如何使用kaptcha库来实现Java验证码的配置和样式设置,包括pom.xml的依赖配置和web.xml中servlet的配置。 ... [详细]
  • 本文介绍了指针的概念以及在函数调用时使用指针作为参数的情况。指针存放的是变量的地址,通过指针可以修改指针所指的变量的值。然而,如果想要修改指针的指向,就需要使用指针的引用。文章还通过一个简单的示例代码解释了指针的引用的使用方法,并思考了在修改指针的指向后,取指针的输出结果。 ... [详细]
  • 在project.properties添加#Projecttarget.targetandroid-19android.library.reference.1..Sliding ... [详细]
  • 猜字母游戏
    猜字母游戏猜字母游戏——设计数据结构猜字母游戏——设计程序结构猜字母游戏——实现字母生成方法猜字母游戏——实现字母检测方法猜字母游戏——实现主方法1猜字母游戏——设计数据结构1.1 ... [详细]
  • PDF内容编辑的两种小方法,你知道怎么操作吗?
    本文介绍了两种PDF内容编辑的方法:迅捷PDF编辑器和Adobe Acrobat DC。使用迅捷PDF编辑器,用户可以通过选择需要更改的文字内容并设置字体形式、大小和颜色来编辑PDF文件。而使用Adobe Acrobat DC,则可以通过在软件中点击编辑来编辑PDF文件。PDF文件的编辑可以帮助办公人员进行文件内容的修改和定制。 ... [详细]
  • 深入理解CSS中的margin属性及其应用场景
    本文主要介绍了CSS中的margin属性及其应用场景,包括垂直外边距合并、padding的使用时机、行内替换元素与费替换元素的区别、margin的基线、盒子的物理大小、显示大小、逻辑大小等知识点。通过深入理解这些概念,读者可以更好地掌握margin的用法和原理。同时,文中提供了一些相关的文档和规范供读者参考。 ... [详细]
  • Redis底层数据结构之压缩列表的介绍及实现原理
    本文介绍了Redis底层数据结构之压缩列表的概念、实现原理以及使用场景。压缩列表是Redis为了节约内存而开发的一种顺序数据结构,由特殊编码的连续内存块组成。文章详细解释了压缩列表的构成和各个属性的含义,以及如何通过指针来计算表尾节点的地址。压缩列表适用于列表键和哈希键中只包含少量小整数值和短字符串的情况。通过使用压缩列表,可以有效减少内存占用,提升Redis的性能。 ... [详细]
  • 本文介绍了django中视图函数的使用方法,包括如何接收Web请求并返回Web响应,以及如何处理GET请求和POST请求。同时还介绍了urls.py和views.py文件的配置方式。 ... [详细]
  • 导出功能protectedvoidbtnExport(objectsender,EventArgse){用来打开下载窗口stringfileName中 ... [详细]
author-avatar
秘色瓷2502891691
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有