用BCP从SQL Server 数据库中导出Excel文件
BCP(Bulk Copy Program)是一种简单高效的数据传输方式在SQL Server中,其他数据传输方式还有SSIS和DTS。
这个程序的主要功能是从数据库中查询Job中指定step的执行信息,并将结果输出到Excel文件中,并利用SQL Server的邮件功能,发送生成的excel文件给指定的人.
DECLARE @command varchar(8000),
@msgBody varchar (4000),
@withJobOutcome VARCHAR(1),
@APJobExecTime DATETIME,
@msgSubject varchar(200),
@reportName varchar(200),
@rundate DATE -- Set report date parameter
-- Set @withJobOutcome as 'T' to retrieve history of job step 'Job Outcome' as well.
SELECT @rundate = '2013-7-22', @withJobOutcome = 'F' -- This file name is specific to DB23, please provide an available
-- path respect to the server you want to monitor.
SET @reportName = 'E:\Report\JobExecutionHistory_' + CONVERT(CHAR(10), @rundate, 120) + '.xls' -- Remove possible report file
SELECT @command = 'del ' + @reportName
EXEC master..xp_cmdshell @command, NO_OUTPUT -- Get execution date time of Job A0000SQ-AP
SELECT TOP 1 @APJobExecTime = CONVERT(CHAR(10), CAST(STR(h.run_date,8, 0) AS DATETIME), 120) +
CAST(STUFF(STUFF(RIGHT('000000' + CAST(h.run_time AS VARCHAR(6)),6),5,0,':'),3,0,':') AS DATETIME)
FROM sysjobhistory h
INNER JOIN sysjobs j
ON j.job_id = h.job_id
WHERE CAST(STR(h.run_date,8, 0) AS DATE)= @rundate
AND j.name = 'A0000SQ-AP' -- Build Job Execution History Query Statement
SELECT @command ='bcp " SELECT ''Job Name'' JobName, ''Step Name'' StepName, '' Execution Time'' RunDate, ''Step Duration'' StepDuration, ''Execution Status'' ExecutionStatus, ''Shift'' Shift UNION ALL SELECT JobName, StepName, CONVERT(CHAR(19), RunDate, 120), StepDuration, ExecutionStatus,(CASE WHEN RunDate < ''' + CONVERT(char(19), @APJobExecTime, 120) + ''' THEN ''NA'' WHEN RunDate >= ''' + CONVERT(char(19), @APJobExecTime, 120) + ''' THEN ''AP'' END) AS Shift FROM (SELECT j.name JobName, h.step_name StepName, CONVERT(CHAR(10), CAST(STR(h.run_date,8, 0) AS DATETIME), 120) + CAST(STUFF(STUFF(RIGHT(''000000'' + CAST(h.run_time AS VARCHAR(6)),6),5,0,'':''),3,0,'':'') AS DATETIME) RunDate, LEFT(RIGHT(''000000'' + CAST(h.run_duration AS VARCHAR(10)),6),2) + '':'' + SUBSTRING(RIGHT(''000000'' + CAST(h.run_duration AS VARCHAR(10)),6),3,2) + '''''''' + RIGHT(RIGHT(''000000'' + CAST(h.run_duration AS VARCHAR(10)),6),2) + '''''''''''' StepDuration, (CASE h.run_status WHEN 0 THEN ''failed'' WHEN 1 THEN ''Succeded'' WHEN 2 THEN ''Retry'' WHEN 3 THEN ''Cancelled'' WHEN 4 THEN ''In Progress'' END) AS ExecutionStatus, h.message MessageGenerated FROM msdb..sysjobhistory h INNER JOIN msdb..sysjobs j ON j.job_id = h.job_id WHERE CAST(STR(h.run_date,8, 0) AS DATE)= ''' + CONVERT(CHAR(10), @rundate, 120) + ''' AND h.step_name not like (SELECT TOP 1 CASE ''' + @withJobOutcome + ''' WHEN ''T'' THEN '''' WHEN ''F'' THEN ''(Job outcome)'' END FROM msdb..sysjobs) AND (j.name in (''A0000SQ-NA'',''A0000SQ-AP'') or (j.name like ''A0%'' and j.name not like ''%-%''))) job ORDER BY RunDate, JobName, StepName" queryout ' + @reportName + ' -c -T -S ' + @@SERVERNAME -- Export to Excel file
EXEC master..xp_cmdshell @command -- Send email with the report as attachement
SET @msgBody = 'Job Execution Time history report on ' + CONVERT(CHAR(10), @rundate, 120) + ' is ready, please look detail information by checking the attached report file.'
SET @msgSubject = 'Job Execution History Report for [' + CONVERT(CHAR(10), @rundate, 120) + ']'
EXEC msdb..sp_send_dbmail @profile_name = 'Notifications',
@recipients = 'xxxxx@gmail.com',
@subject = @msgSubject,
@body = @msgBody,
@body_format ='TEXT',
@file_attachments = @reportName -- Remove the temporary file after email sent
SELECT @command = 'del ' + @reportName
EXEC master..xp_cmdshell @command, NO_OUTPUT
注意事项
BCP中的table或query是不能换行的,不然就会报参数不正确的错误。
Reference
用BCP从SQL Server 数据库中导出Excel文件的更多相关文章
- Sql Server 数据库中调用dll文件
1.首先新建一个空的解决方案,并添加一个类库,代码如下,编译并生产dll using System; using System.Collections.Generic; using System.Da ...
- 清空SQL Server数据库中所有表数据的方法(转)
清空SQL Server数据库中所有表数据的方法 其实删除数据库中数据的方法并不复杂,为什么我还要多此一举呢,一是我这里介绍的是删除数据库的所有数据,因为数据之间可能形成相互约束关系,删除操作可能陷入 ...
- 转:SQL SERVER数据库中实现快速的数据提取和数据分页
探讨如何在有着1000万条数据的MS SQL SERVER数据库中实现快速的数据提取和数据分页.以下代码说明了我们实例中数据库的“红头文件”一表的部分数据结构: CREATE TABLE [dbo]. ...
- .NET客户端下载SQL Server数据库中文件流保存的大电子文件方法(不会报内存溢出异常)
.NET客户端下载SQL Server数据库中文件流保存的大电子文件方法(不会报内存溢出异常) 前段时间项目使用一次性读去SQL Server中保存的电子文件的文件流然后返回给客户端保存下载电子文件, ...
- SQL server数据库中的DateTime类型出现的问题
我们知道这个SQL server数据库中的DateTime类型是数据库应用开发中经经常使用到的一种数据类型.而C#语言中也有DateTime类型,尽管二者都是用来描写叙述时间的,可是它们的默认值是不同 ...
- C#同步SQL Server数据库中的数据--数据库同步工具[同步新数据]
C#同步SQL Server数据库中的数据 1. 先写个sql处理类: using System; using System.Collections.Generic; using System.Dat ...
- C#从SQL server数据库中读取l图片和存入图片
原文:C#从SQL server数据库中读取l图片和存入图片 本实例主要介绍如何将图片存入数据库.将图片存入数据库,首先要在数据库中建立一张表,将存储图片的字段类型设为Image类型,用FileStr ...
- 清空SQL Server数据库中所有表数据的方法
原文:清空SQL Server数据库中所有表数据的方法 其实删除数据库中数据的方法并不复杂,为什么我还要多此一举呢,一是我这里介绍的是删除数据库的所有数据,因为数据之间可能形成相互约束关系,删除操作可 ...
- 浅析SQL Server数据库中的伪列以及伪列的含义
SQL Server中的伪列 下午看QQ群有人在讨论(非聚集)索引的存储,说,对于聚集索引表,非聚集索引存储的是索引键值+聚集索引键值:对于非聚集索引表,索引存储的是索引键值+RowId,这应该是一个 ...
随机推荐
- 自定义适用于手机和平板电脑的 Dynamics 365(五):可视控件
使用 适用于手机的 Dynamics 365 和平板电脑中的可视控件帮助移动用户更快地输入 Dynamics 365 数据并提供更丰富的可视体验. 此组自定义控件包括滑块.开关.星数评级.视频嵌入以及 ...
- Finereport和Finebi的区别
1.问题描述 大家现在可能都知道,目前帆软旗下特色产品主要是FineReport和FineBI,但是部分用户可能会有个疑问:FineReport和FineBI到底有什么区别? 2.产品介绍FineRe ...
- android控件跟随手势滑动改变位置
要求:1.通过手指移动来拖动图片 2.控制图片不能超出屏幕显示区域 技术点:1.MotionEvent处理2.对View进行动态定位(layout) activity_main.xml: < ...
- springcloud 入门 3 (服务之间的调用)
服务调用: 指的是注册到服务端上的客户端之间数据的相互调用问题:服务与服务的通讯是基于http restful的 服务直接调用主要有两种实现:ribbon 和 feign ribbon是实现负载均衡 ...
- Jenkins自动化打包配置
具体流程不细讲,教程很多 * 环境配置: * xmapp安装 * Jenkins.war丢到Tomcat目录中,配置Jenkins * 宿主机安装jdk,gradle,配置环境变量(在Jenkins的 ...
- C#多线程的用法10-线程池
TheadPool:在进行多线程编程时,如果不想频繁的创建线程,那可以考虑使用使用线程池来完成多线程编程的工作.你只需将要处理的任务交付给ThreadPool,如果ThreadPool中有空闲的线程, ...
- Oracle EBS PO rcv_shipment_headers 数据缺失
Datafix : How to Recreate Missing Receipt or Shipment Header Records (RCV_SHIPMENT_HEADERS table) (D ...
- mysqldump: Error 2013
最近在mysqldump时,遭遇mysqldump: Error 2013错误.以为是常见的参数设置有问题,调整之后,也没有任何成效.原来发生了OOM,以下是其具体描述. 一.故障现象 环境 # mo ...
- 详解Oracle DELETE和TRUNCATE 的区别
原文地址:http://www.cnblogs.com/simplefrog/archive/2012/07/30/2615169.html 语法delete from aa truncate tab ...
- grep 匹配制表符 和 换行符
使用: [root@dhcp-- ~]# grep $'\n' log.txt [root@dhcp-- ~]# grep $'\t' log.txt 这两个命令 [root@dhcp-- ~]# l ...