一、SQL系列之~使用SQL语言导出数据及实现定时导出数据任务

一般情况下,SQL数据库中带有导入与导出数据的直接按键操作,点击数据表所在的数据库--任务--导出/导入数据,根据导入/导出向导直接将数据导出即可。

但导出的数据格式多为Excel格式,如果需要导出的数据为csv/word/txt格式时,我们如何用SQL语言操作?如果需定时导出更新的数据表,又该如何操作呢?

第一步:使用 sp_configure 开启系统存储过程sys.xp_cmdshell的服务器安全配置

 1   --(1)开启配置
 2  USE master
 3 GO
 4 RECONFIGURE --先执行一次刷新,处理上次的配置
 5 GO
 6
 7 EXEC sp_configure ‘show advanced options‘,1 --启用xp_cmdshell的高级配置
 8 GO
 9 RECONFIGURE --刷新配置
10 GO
11 EXEC sp_configure ‘xp_cmdshell‘,1 --打开xp_cmdshell,可以调用SQL系统之外的命令
12 GO
13 RECONFIGURE
14 GO
15 --备注:不使用xp_cmdshell时为了安全性,一定要将该配置关闭
16 --关闭配置(即将1改为0)
17 EXEC sp_configure ‘show advanced options‘,‘1‘ --确保show advances options 的值为1,这样才可以执行xp_cmdshell为0的操作
18 GO
19 RECONFIGURE
20 GO
21 EXEC sp_configure ‘xp_cmdshell‘,0 --关闭xp_cmdshell
22 GO
23 RECONFIGURE
24 GO
25 EXEC sp_configure ‘show advanced options‘,‘0‘ --关闭show advanced options
26 GO
27 RECONFIGURE
28 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语句的数据表

1 EXEC master..xp_cmdshell
2   ‘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语句只能一行到底,不能进行语句换行处理,不易定位错误点,因此可进行创建存储过程-声明变量-调用,也为后面的定时导出数据任务做准备。

 1 --第一种:部分语句直接在bcp中写出
 2 use 练习用的--在哪个数据库下建立的存储过程
 3 go
 4 if exists (select * from dbo.sysobjects where id = object_id(‘pro_1‘) and OBJECTPROPERTY(id, ‘IsProcedure‘) = 1)
 5 drop procedure pro_1--查询是否存在该存储过程
 6
 7 --先执行上述两条语句,再执行下面的,因为‘CREATE/ALTER PROCEDURE‘ 必须是查询批次中的第一个语句。
 8 create procedure  pro_1--创建存储过程
 9 as
10 begin
11 declare @exec_sql varchar(1025)
12 set @exec_sql=‘select * from 练习用的.dbo.student ‘---数据表使用的完整路径
13 set @exec_sql=‘bcp "‘+@exec_sql+‘" queryout "E:\学习\SQL\student.xls" -c -T -S"ssksksksfr6kbb" -U"sa" -P"1234"‘
14 exec master.sys.xp_cmdshell @exec_sql
15 end
16
17 exec pro_1--执行存储过程,导出数据

 1 --第二种:数据均进行参数声明,bcp中直接引入参数
 2 create procedure pro_2
 3 as
 4 begin
 5     exec sp_configure ‘show advanced options‘,1    --开启配置
 6     reconfigure
 7     exec sp_configure ‘xp_cmdshell‘,1    --开启配置
 8     reconfigure--这四条语句可在存储过程外执行(像第一步直接大环境下执行),也可在存储过程里面写,建议里面,后续建立定时导出数据任务比较方便
 9 declare @filename varchar(1024)--Excel文件名
10 declare @path varchar(1024)--Excel存放路径名
11 declare @exec_sql varchar(1024)--查询语句
12 declare @server varchar(1024)--服务器名,可不写默认,若不写这项-S去掉
13 declare @zhanghu varchar(1024)--登录账户名
14 declare @mima varchar(1024)--账户密码
15 set @filename=‘ ‘+CONVERT(varchar(100), GETDATE(), 112)+‘ .xls‘--Excel文件名
16 --set @FileName =‘Log‘ + CONVERT(varchar(100), GETDATE(), 112)+replace(CONVERT(varchar(100), GETDATE(), 108),‘:‘,‘‘) + ‘.xls‘ 这种文件名是日期与时间结合的
17 set @path=‘E:\学习\SQL\‘--Excel路径名,多加\是为了直接在该路径下放文件,否则命名则为SQL加上Excel名,文件将放在学习文件夹下
18 set @server=‘ssksksksfr6kbb‘--服务器名,相应的bcp要有-S,若不写这项-S去掉
19 set @zhanghu=‘sa‘--登录账户名
20 set @mima=‘1234‘--账户密码名
21 set @exec_sql=‘select * from 练习用的.dbo.student‘--数据表要用完整的数据库.dbo.表名
22 set @exec_sql=‘bcp "‘+@exec_sql+‘" queryout "‘+@path+@filename+‘" -c -T -S"‘+@server+‘" -U"‘+@zhanghu+‘" -P "‘+@mima+‘"‘
23 exec master.sys.xp_cmdshell @exec_sql--bcp中涉及的每个字段要用双引号""引起来,又因为有+号连接符,因此双引号里需再放完整单引号进行+连接
24 end
25 go
26
27 exec pro_2-执行存储过程导出数据

第三步:建立定时导出数据表任务

(1)启动SQL Server代理

(2)创建定时作业

(3)更新数据库中的数据表格,然后检查更新的数据是否定时输出

原文地址:https://www.cnblogs.com/www123yyy123/p/10960814.html

时间: 2024-11-13 03:57:08

一、SQL系列之~使用SQL语言导出数据及实现定时导出数据任务的相关文章

Azure SqlDatabase 系列之2--Azure SQL Database 与 SQL Server 的比较

(内容整理自msdn Azure Sql Database主题部分内容) 与 SQL Server 相似,Azure SQL Database 为基于 Transact-SQL 的数据库访问公开表格格式数据流 (TDS) 接口.这允许你的数据库应用程序采用与它们使用 SQL Server 相同的方式来使用 Azure SQL Database. 与 SQL Server 管理不同,Azure SQL Database 从物理管理中提取逻辑管理:你继续管理数据库.登录名.用户和角色,但 Micro

SQL Server 2008空间数据应用系列三:SQL Server 2008空间数据类型

原文:SQL Server 2008空间数据应用系列三:SQL Server 2008空间数据类型 友情提示,您阅读本篇博文的先决条件如下: 1.本文示例基于Microsoft SQL Server 2008 R2调测. 2.具备 Transact-SQL 编程经验和使用 SQL Server Management Studio 的经验. 3.熟悉或了解Microsoft SQL Server 2008中的空间数据类型. 4.具备相应的GIS专业理论知识. 5.其他相关知识. SQL Serve

SQL系列(十二)—— insert update delete

前言 这个系列的前面都一直在介绍查询select.但是SQL中十分广泛,按对数据的不同处理可以分为: DML:全称Data Manipulation Language,从名字上可以看出,DML是对数据的维护管理语言,主要是处理数据本身: DDL:全称Data Definition Language,同样从名字上可以看出,DDL数据定义语言,主要用来操作库.表.视图.索引等,主要是对数据结构的操作: DCL:全称Data Control Language,从名字可以看出,是数据控制语言,主要用来控

SQL中的四种语言DDL,DML,DCL,TCL

1.DDL(Data Definition Language)数据库定义语言statements are used to define the database structure or schema. DDL是SQL语言的四大功能之一.用于定义数据库的三级结构,包括外模式.概念模式.内模式及其相互之间的映像,定义数据的完整性.安全控制等约束DDL不需要commit.CREATEALTERDROPTRUNCATECOMMENTRENAME 2.DML(Data Manipulation Lang

SCCM 2012 R2实战系列之一:SQL安装

大家好,从今天开始跟大家一起分享自己学习SCCM 2012 R2的一些心得和具体的部署配置,希望能帮到大家.由于SCCM部署的步骤比较复杂,内容也比较多,所以我把SCCM整个部署过程分为以下三个章节: l SQL Server 2012 SP1的安装 l SCCM安装前的准备工作 l SCCM 主站点的部署 1.1 实验拓扑图: 下面是本次部署的一个拓扑图,所有操作系统均使用Windows Server 2012 R2 Datacenter版本 1.2 域环境的准备 微软的很多产品都是基于域环境

sql系列(基础篇)-第二章 约束和排序数据

更好的看↑代码点击VIEW PLAN 第二章 约束和排序数据 1. 在 emp 表中选择工资介于 1500 到 2500 的员工的信息: 注意:使用 between 下边界 and 上边界时,条件包括边界值: [email protected]>l 1 select * from emp 2* where sal between 1500 and 2500 [email protected]>/ EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO ----

Thinking in SQL系列之四:数据挖掘C4.5决策树算法

原创: 牛超   2017-02-11   Mail:[email protected] C4.5是一系列用在机器学习和数据挖掘的分类问题中的算法.它的目标是监督学习:给定一个数据集,其中的每一个元组都能用一组属性值来描述,每一个元组属于一个互斥的类别中的某一类.C4.5的目标是通过学习,积累经验,为后续决策服务. 该算法目前能找到各类版本,C.JAVA.PYTHON.而SQL版本闻所未闻,前篇我有提过,数据处理,SQL为王,如何以SQL的思维来实现C4.5决策树算法是本篇的重点. PS:多年与

sql系列(基础篇)-前言 课前补充知识

前言 课前补充知识 Number(p,s) Number(p,s):数字类型,p 表示数字的有效长度(从数字的左边第 1 位不为 0 的开始算起,直到最右边的长度:取值范围 0~38 位),s 表示数字的精度(即小数点右边的位数,取值范围-84~127 位): Varchar2(s) Varchar2(s):可变长的字符类型,s 表示字符串的长度,取值范围 1~4000 位: Char(s) Char(s):定长的字符类型,s 表示字符串的长度,取值范围 1~2000 位: Date Date:

sql系列(基础篇)-第一章 关于sysdate

第一章 基本的SQL语句 1. 查询数据库系统时间,常以服务器默认的格式进行显示(根据数据库的字符集而定): 注意:dual 为数据库中的虚表,隶属于管理员 sys 用户,但所有的用户都可以访问:无实际意义,仅充当select 语句的结构(用 select取系统信息.临时结果等时,以 dual 充当语句结构): [email protected]>select sysdate from dual; SYSDATE --------- 18-JUN-14 1.1 修改系统时间的显示格式:(sess