一、SQL系列之~使用SQL语言导出数据及实现定时导出数据任务
一般情况下,SQL数据库中带有导入与导出数据的直接按键操作,点击数据表所在的数据库--任务--导出/导入数据,根据导入/导出向导直接将数据导出即可。
但导出的数据格式多为Excel格式,如果需要导出的数据为csv/word/txt格式时,我们如何用SQL语言操作?如果需定时导出更新的数据表,又该如何操作呢?
第一步:使用 sp_configure 开启系统存储过程sys.xp_cmdshell的服务器安全配置
--(1)开启配置
USE master
GO
RECONFIGURE --先执行一次刷新,处理上次的配置
GO EXEC sp_configure 'show advanced options',1 --启用xp_cmdshell的高级配置
GO
RECONFIGURE --刷新配置
GO
EXEC sp_configure 'xp_cmdshell',1 --打开xp_cmdshell,可以调用SQL系统之外的命令
GO
RECONFIGURE
GO
--备注:不使用xp_cmdshell时为了安全性,一定要将该配置关闭
--关闭配置(即将1改为0)
EXEC sp_configure 'show advanced options','' --确保show advances options 的值为1,这样才可以执行xp_cmdshell为0的操作
GO
RECONFIGURE
GO
EXEC sp_configure 'xp_cmdshell',0 --关闭xp_cmdshell
GO
RECONFIGURE
GO
EXEC sp_configure 'show advanced options','' --关闭show advanced options
GO
RECONFIGURE
GO
第二步:使用系统存储过程sys.xp_cmdshell及大容量复制程序实用工具bcp导出数据
(1)使用bcp直接导出整个数据表
exec master.sys.xp_cmdshell 'bcp 数据库名称.dbo.数据表名称 out 输出的路径及格式 -c -q -S"服务器名称" -U"登录名" -P"登录名密码"' --例如: exec master.sys.xp_cmdshell'bcp 练习用的.dbo.student out E:学习\SQL\temp1.txt -c -q -S"ssksksksfr6kbb" -U"sa" -P"1234"' exec master.sys.xp_cmdshell
'bcp 练习用的.dbo.student out E:\学习\SQL\temp2.xls -F 1 -L 5 -c -T -S"ssksksksfr6kbb" -U"sa" -P"1234"' --(1)这里的格式txt可改成xls、csv、xlsx、doc
--(2)输出整个表格,bcp后面跟out
--(3)bcp用法中的字符 :-F输出第几行开始,-L输出第几行结束,-c使用char类型做为存储类型,-T可信连接(若未指定T必须指定-u-p),-S服务器,-U用户,-P密码,-t 指定字符分割符,默认是"\t"(空格,输出的结果在同一个单元格中),-q带引号的标识符
--(4)bcp中涉及的字符段要用双引号""引起来
bcp的具体使用方法见:https://docs.microsoft.com/zh-cn/sql/tools/bcp-utility?view=sql-server-2017
(2)bcp与queryout 连用,导出含有select语句的数据表
EXEC master..xp_cmdshell
'bcp "select sname,sbirthday from 练习用的.dbo.student " queryout "E:\学习\SQL\temp2.xlsx"-c -q -S"ssksksksfr6kbb" -U"sa" -P"1234"'
这里要说明一下的是,使用bcp导出来的表格是没有列名的,若要输出含有where筛选条件的查询语句是会提示错误的,这时候可以直接利用数据库-任务--导出/导入数据向导中的编写查询语句
(3)创建存储过程导出数据表
含有select语句的bcp后需跟queryout,但是这种bcp语句只能一行到底,不能进行语句换行处理,不易定位错误点,因此可进行创建存储过程-声明变量-调用,也为后面的定时导出数据任务做准备。
--第一种:部分语句直接在bcp中写出
use 练习用的--在哪个数据库下建立的存储过程
go
if exists (select * from dbo.sysobjects where id = object_id('pro_1') and OBJECTPROPERTY(id, 'IsProcedure') = 1)
drop procedure pro_1--查询是否存在该存储过程 --先执行上述两条语句,再执行下面的,因为'CREATE/ALTER PROCEDURE' 必须是查询批次中的第一个语句。
create procedure pro_1--创建存储过程
as
begin
declare @exec_sql varchar(1025)
set @exec_sql='select * from 练习用的.dbo.student '---数据表使用的完整路径
set @exec_sql='bcp "'+@exec_sql+'" queryout "E:\学习\SQL\student.xls" -c -T -S"ssksksksfr6kbb" -U"sa" -P"1234"'
exec master.sys.xp_cmdshell @exec_sql
end exec pro_1--执行存储过程,导出数据
--第二种:数据均进行参数声明,bcp中直接引入参数
create procedure pro_2
as
begin
exec sp_configure 'show advanced options',1 --开启配置
reconfigure
exec sp_configure 'xp_cmdshell',1 --开启配置
reconfigure--这四条语句可在存储过程外执行(像第一步直接大环境下执行),也可在存储过程里面写,建议里面,后续建立定时导出数据任务比较方便
declare @filename varchar(1024)--Excel文件名
declare @path varchar(1024)--Excel存放路径名
declare @exec_sql varchar(1024)--查询语句
declare @server varchar(1024)--服务器名,可不写默认,若不写这项-S去掉
declare @zhanghu varchar(1024)--登录账户名
declare @mima varchar(1024)--账户密码
set @filename=' '+CONVERT(varchar(100), GETDATE(), 112)+' .xls'--Excel文件名
--set @FileName ='Log' + CONVERT(varchar(100), GETDATE(), 112)+replace(CONVERT(varchar(100), GETDATE(), 108),':','') + '.xls' 这种文件名是日期与时间结合的
set @path='E:\学习\SQL\'--Excel路径名,多加\是为了直接在该路径下放文件,否则命名则为SQL加上Excel名,文件将放在学习文件夹下
set @server='ssksksksfr6kbb'--服务器名,相应的bcp要有-S,若不写这项-S去掉
set @zhanghu='sa'--登录账户名
set @mima=''--账户密码名
set @exec_sql='select * from 练习用的.dbo.student'--数据表要用完整的数据库.dbo.表名
set @exec_sql='bcp "'+@exec_sql+'" queryout "'+@path+@filename+'" -c -T -S"'+@server+'" -U"'+@zhanghu+'" -P "'+@mima+'"'
exec master.sys.xp_cmdshell @exec_sql--bcp中涉及的每个字段要用双引号""引起来,又因为有+号连接符,因此双引号里需再放完整单引号进行+连接
end
go exec pro_2-执行存储过程导出数据
第三步:建立定时导出数据表任务
(1)启动SQL Server代理
(2)创建定时作业
(3)更新数据库中的数据表格,然后检查更新的数据是否定时输出
一、SQL系列之~使用SQL语言导出数据及实现定时导出数据任务的更多相关文章
- 【SQL系列】从SQL语言的分类谈COMMIT和ROLLBACK的用法
公众号:SAP Technical 本文作者:matinal 原文出处:http://www.cnblogs.com/SAPmatinal/ 原文链接:[SQL系列]从SQL语言的分类谈COMMIT和 ...
- SQL Server 2008空间数据应用系列三:SQL Server 2008空间数据类型
原文:SQL Server 2008空间数据应用系列三:SQL Server 2008空间数据类型 友情提示,您阅读本篇博文的先决条件如下: 1.本文示例基于Microsoft SQL Server ...
- .Net程序员学用Oracle系列(28):PLSQL 之SQL分类和动态SQL
1.SQL 语句分类 1.1.分类方法及类型 1.2.数据定义语言 1.3.数据操纵语言 1.4.其它语句 2.动态 SQL 理论 2.1.动态 SQL 的用途 2.2.动态 SQL 的语法 2.3. ...
- SQL系列(十二)—— insert update delete
前言 这个系列的前面都一直在介绍查询select.但是SQL中十分广泛,按对数据的不同处理可以分为: DML:全称Data Manipulation Language,从名字上可以看出,DML是对数据 ...
- Flink SQL 系列 | 5 个 TableEnvironment 我该用哪个?
本文为 Flink SQL 系列文章的第二篇,前面对 Flink 1.9 Table 新架构及 Planner 的使用进行了详细说明,本文详细讲解 5 个 TableEnvironment 及其适用场 ...
- C语言+ODBC+SQL 操作(向SQL里面添加数据)
为了节省时间,我就引用上一节的数据库的表和C语言的结构体数组,在结构体数组中添加数据,清空数据库数据. 第一步查询:SQLBindParameter函数的用法. SQLRETURN SQLBindPa ...
- Red Gate系列之三 SQL Server 开发利器 SQL Prompt 5.3.4.1 Edition T-SQL智能感知分析器 完全破解+使用教程
原文:Red Gate系列之三 SQL Server 开发利器 SQL Prompt 5.3.4.1 Edition T-SQL智能感知分析器 完全破解+使用教程 Red Gate系列之三 SQL S ...
- Red Gate系列之二 SQL Source Control 3.0.13.4214 Edition 数据库版本控制器 完全破解+使用教程
原文:Red Gate系列之二 SQL Source Control 3.0.13.4214 Edition 数据库版本控制器 完全破解+使用教程 Red Gate系列之二 SQL Source Co ...
- sql点滴38—SQL Server 2008和SQL Server 2008 R2导出数据的选项略有不同
原文:sql点滴38—SQL Server 2008和SQL Server 2008 R2导出数据的选项略有不同 说明: 以前要将一个表中的数据导出为脚本,只有用存储过程.现在在SQL Server ...
随机推荐
- 注解是建立在class文件基础上的东西,同C语言的宏有异曲同工的效果
注解是建立在class文件基础上的东西,同C语言的宏有异曲同工的效果 https://www.cnblogs.com/deman/p/5519901.html @是java注解,即annotation ...
- C# 后台按键 视频播放器 全屏后无法 触发
第一种 (全屏不可触发) protected override bool ProcessCmdKey(ref System.Windows.Forms.Message msg, System.Win ...
- python 获取本机环境信息
一.函数 1.socket.gethostname():不带任何参数,返回一个字符串(主机名),通常不完整.比如csm.example.com 只会返回csm 2.socket.getfqdn():带 ...
- mysql异地备份方案经验总结
Mysql 数据库异地备份脚本 实验环境:关闭防火墙不然不能授权登录 Mysql-server:192.168.30.25 Mysql-client: 192.168.30.24 实验要求:对mys ...
- Centos7下mysql的主从配置
最近,有朋友业务并发量比较大,让我帮他配置个主从,来缓解数据库的压力.下面就是我配置的,有需要的朋友可以借鉴下. 首先,我得到2台服务器: 172.18.2.142(主) 172.18.2.141(从 ...
- Dinic当前弧优化 模板及教程
在阅读本文前,建议先自学最大流的Ek算法. 引入 Ek的核心是执行bfs,一旦找到增广路就停下来进行增广.换言之,执行一遍BFS执行一遍DFS,这使得效率大大降低.于是我们可以考虑优化. 核心思路 在 ...
- python BeautiulSoup
==============================================查找网页中<a>标签中的链接from bs4 import BeautifulSoup with ...
- App后台开发运维和架构实践学习总结(2)——RESTful API设计技巧
前言 移动互联网时代,RESTful API成为越来越重要的移动端和服务器端交互的形式.尤其是在很多互联网公司或者传统行业拥抱移动互联网的时候,一套设计良好的Restful API能够帮助互联网产品支 ...
- ActiveMQ学习总结(1)——ActiveMQ快速入门
1.下载ActiveMQ 去官方网站下载:http://activemq.apache.org/ 2.运行ActiveMQ 解压缩apache-activemq-5.5.1-bin.zip,然后双击a ...
- (39.4) Spring Boot Shiro权限管理【从零开始学Spring Boot】
在读此文章之前您还可能需要先了解: (39.1) Spring Boot Shiro权限管理[从零开始学Spring Boot] http://412887952-qq-com.iteye.com/b ...