一般情况下,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语言导出数据及实现定时导出数据任务的更多相关文章

  1. 【SQL系列】从SQL语言的分类谈COMMIT和ROLLBACK的用法

    公众号:SAP Technical 本文作者:matinal 原文出处:http://www.cnblogs.com/SAPmatinal/ 原文链接:[SQL系列]从SQL语言的分类谈COMMIT和 ...

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

    原文:SQL Server 2008空间数据应用系列三:SQL Server 2008空间数据类型 友情提示,您阅读本篇博文的先决条件如下: 1.本文示例基于Microsoft SQL Server ...

  3. .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. ...

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

    前言 这个系列的前面都一直在介绍查询select.但是SQL中十分广泛,按对数据的不同处理可以分为: DML:全称Data Manipulation Language,从名字上可以看出,DML是对数据 ...

  5. Flink SQL 系列 | 5 个 TableEnvironment 我该用哪个?

    本文为 Flink SQL 系列文章的第二篇,前面对 Flink 1.9 Table 新架构及 Planner 的使用进行了详细说明,本文详细讲解 5 个 TableEnvironment 及其适用场 ...

  6. C语言+ODBC+SQL 操作(向SQL里面添加数据)

    为了节省时间,我就引用上一节的数据库的表和C语言的结构体数组,在结构体数组中添加数据,清空数据库数据. 第一步查询:SQLBindParameter函数的用法. SQLRETURN SQLBindPa ...

  7. 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 ...

  8. 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 ...

  9. sql点滴38—SQL Server 2008和SQL Server 2008 R2导出数据的选项略有不同

    原文:sql点滴38—SQL Server 2008和SQL Server 2008 R2导出数据的选项略有不同 说明: 以前要将一个表中的数据导出为脚本,只有用存储过程.现在在SQL Server ...

随机推荐

  1. 洛谷——P1759 通天之潜水

    P1759 通天之潜水   题目背景 直达通天路·小A历险记第三篇 题目描述 在猴王的帮助下,小A终于走出了这篇荒山,却发现一条波涛汹涌的河拦在了自己的面前.河面上并没有船,但好在小A有n个潜水工具. ...

  2. SDOI2018退役记

    在NOIp2017中,我意识到自己啥也不会.如今SDOI2018快来了,自己还是啥也不会.高一两次考试注定以打两次酱油告终.还是记录一下,到NOIp之后如果还没有退役的话,那这个博客可能还会继续更新吧 ...

  3. Chat Group gym101775A(逆元,组合数)

    传送门:Chat Group(gym101775A) 题意:一个宿舍中又n个人,最少k(k >= 3)个人就可以建一个讨论组,问最多可以建多少个不同的讨论组. 思路:求组合数的和,因为涉及除法取 ...

  4. 【MFC Programming】 Using Dialog To Set A Correlate Menu

    This blog will show how to display a menu we designed in a dialog. 1.Insert a new dialog& a new ...

  5. Linux学习总结(3)——Linux实用工具

    1. Windows下同步Linux文件(Linux安装Samba和配置) 场景需求: 安装了Ubuntu在虚拟机上,但是代码编辑或者其它更多的操作的时候,还是习惯在windows下进行.如果wind ...

  6. 对SPI、IIC、IIS、UART、CAN、SDIO、GPIO的解释

    SPI SPI(Serial Peripheral Interface:串行外设接口); SPI总线由三条信号线组成:串行时钟(SCLK).串行数据输出(SDO).串行数据输入(SDI).SPI总线可 ...

  7. AngularJS:添加检查密码输入是否一致的功能

    感谢作者(http://blog.brunoscopelliti.com/angularjs-directive-to-check-that-passwords-match) 利用AngularJS的 ...

  8. [Fri 26 Jun 2015 ~ Thu 2 Jul 2015] Deep Learning in arxiv

    Natural Neural Networks Google DeepMind又一神作 Projected Natural Gradient Descent algorithm (PRONG) bet ...

  9. 幻世(OurDream)TM 2D图形引擎开通捐赠渠道

    为了支持幻世(OurDream)TM 2D图形引擎更好的发展,同一时候也是为了给希望支持引擎发展的朋友一个安全快捷的渠道,Lizcst Software Lab于今日正式在官方旗舰店增设了一个捐赠捐款 ...

  10. POJ 1128 Frame Stacking(拓扑排序·打印字典序)

    题意  给你一些矩形框堆叠后的鸟瞰图  推断这些矩形框的堆叠顺序  每一个矩形框满足每边都至少有一个点可见  输入保证至少有一个解 按字典序输出全部可行解 和上一题有点像  仅仅是这个要打印全部的可行 ...