把SQL Server 错误日志导出为EXCEL 并发送到指定的ftp 或者 共享盘

把SQL Server 错误日志导出为EXCEL 并发送到指定的ftp 或者 共享盘
/*
2005版本 和2000 版本 sql server 错误日志结果不同。
下面是 适用于 SQL2000的
其中加入了 自己编写的一个ftp小程序 用来上传 相关日志状况

*/

IF object_id('tempdb..#error_log') IS NOT NULL
DROP TABLE #error_log
go

--2000
CREATE TABLE #error_log(id INT IDENTITY(1,1), ErrorContent VARCHAR(8000),continueRow int)
insert INTO #error_log EXEC master.dbo.xp_readerrorlog

UPDATE a SET ErrorContent = LEFT(b.ErrorContent,23) + a.ErrorContent
FROM #error_log a
INNER JOIN #error_log b ON a.id = b.id + a.continueRow
WHERE a.continueRow>0


DECLARE @str VARCHAR(8000)
SET @str= '
SELECT id,errorcontent,continuerow FROM #error_log WHERE ErrorContent LIKE
CONVERT(VARCHAR(10),DATEADD(dd,-1,GETDATE()) ,120) +
''%''
OR ErrorContent LIKE CONVERT(VARCHAR(10),GETDATE() ,120) +
''%'''

exec talkins.dbo.p_exporttb @sqlstr= @str,@path= 'e:\fanr\temp ',@fname= 'SQLLog.xls' ,@sheetname ='log'
go
exec master..xp_cmdshell 'e:\fanr\temp\myftp.exe p e:\fanr\temp\ /fanr SQLLog.xls'
go
exec master..xp_cmdshell 'del e:\fanr\temp\SQLLog.xls'

  

/*--数据导出EXCEL

导出表中的数据到Excel,包含字段名,文件为真正的Excel文件
,如果文件不存在,将自动创建文件
,如果表不存在,将自动创建表
基于通用性考虑,仅支持导出标准数据类型

--邹建 2003.10(引用请保留此信息)--
*/

/*--调用示例

p_exporttb @sqlstr= 'select * from t2 ',@path= 'd:\ ',@fname= 'a1.xls' ,@sheetname ='local2'
--
*/
create PROCEDURE p_exporttb (
@sqlstr sysname, --查询语句,如果查询语句中使用了order by ,请加上top 100 percent,注意,如果导出表/视图,用上面的存储过程
@path nvarchar(1000), --文件存放目录
@fname nvarchar(250), --文件名
@sheetname varchar(250)='' --要创建的工作表名,默认为文件名
)
as
--select @sqlstr= 'select * from t2 ',@path= 'd:\ ',@fname= 'a1.xls' ,@sheetname ='local'
declare @err int,@src nvarchar(255),@desc nvarchar(255),@out int
declare @obj int,@constr nvarchar(1000),@sql varchar(8000),@fdlist varchar(8000)

--参数检测
if isnull(@fname,'')='' set @fname='temp.xls'
if isnull(@sheetname,'')='' set @sheetname=replace(@fname,'.','#')

--检查文件是否已经存在
if right(@path,1)<>'\' set @path=RTRIM(@path)+'\'
IF object_id('tempdb..#tb') IS NOT NULL
DROP TABLE #tb
create table #tb(a bit,b bit,c bit)
set @sql=@path+@fname
insert into #tb exec master..xp_fileexist @sql

--数据库创建语句
set @sql=@path+@fname
if exists(select 1 from #tb where a=1)
set @constr='DRIVER={Microsoft Excel Driver (*.xls)};DSN='''';READONLY=FALSE'
+';CREATE_DB="'+@sql+'";DBQ='+@sql
else
set @constr='Provider=Microsoft.Jet.OLEDB.4.0;Extended Properties="Excel 8.0;HDR=YES'
+';DATABASE='+@sql+'"'

--连接数据库
exec @err=sp_oacreate 'adodb.connection',@obj out
if @err<>0 goto lberr

exec @err=sp_oamethod @obj,'open',null,@constr
if @err<>0 goto lberr


--创建表的SQL
declare @tbname sysname
set @tbname='##tmp_'+convert(varchar(38),newid())
set @sql='select * into ['+@tbname+'] from('+@sqlstr+') a'
exec(@sql)

select @sql='',@fdlist=''
select @fdlist=@fdlist+','+a.name
,
@sql=@sql+',['+a.name+'] '
+case when b.name in('char','nchar','varchar','nvarchar') then
'text('+cast(case when a.length>255 then 255 else a.length end as varchar)+')'
when b.name in('tynyint','int','bigint','tinyint') then 'int'
when b.name in('smalldatetime','datetime') then 'datetime'
when b.name in('money','smallmoney') then 'money'
else b.name end
FROM tempdb..syscolumns a left join tempdb..systypes b on a.xtype=b.xusertype
where b.name not in('image','text','uniqueidentifier','sql_variant','ntext','varbinary','binary','timestamp')
and a.id=(select id from tempdb..sysobjects where name=@tbname)
select @sql='create table ['+@sheetname
+']('+substring(@sql,2,8000)+')'
,
@fdlist=substring(@fdlist,2,8000)

exec @err=sp_oamethod @obj,'execute',@out out,@sql
if @err<>0 goto lberr

exec @err=sp_oadestroy @obj

--导入数据
set @sql='openrowset(''MICROSOFT.JET.OLEDB.4.0'',''Excel 8.0;HDR=YES
;DATABASE=
'+@path+@fname+''',['+@sheetname+'$])'

exec('insert into '+@sql+'('+@fdlist+') select '+@fdlist+' from ['+@tbname+']')

set @sql='drop table ['+@tbname+']'
exec(@sql)
return

lberr:
exec sp_oageterrorinfo 0,@src out,@desc out
lbexit:
select cast(@err as varbinary(4)) as 错误号
,
@src as 错误源,@desc as 错误描述
select @sql,@constr,@fdlist
GO

  

posted on 2011-07-22 14:37 Fanr_Zh 阅读(...) 评论(...) 编辑 收藏

转载于:https://www.cnblogs.com/Amaranthus/archive/2011/07/22/2113855.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/378303.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

c语言软件幻化,python字符串处理

字符串字符串&#xff1a;不可变有序序列&#xff0c;在python可使用 "abc" , """abc""" ,abc 的形式表示&#xff0c;属于一种字面常量&#xff0c;python3中字符均属于Unicode编码。字符串可以被迭代&#xff0c;遍历&#xff0c;切…

第十章 开箱即用

第十章 开箱即用 “开箱即用”&#xff08;batteries included&#xff09;最初是由Frank Stajano提出的&#xff0c;指的是Python丰富的标准库。 模块 使用import将函数从外部模块导入到程序中。 import math math.sin(0)#结果为&#xff1a;0.0模块就是程序 在文件夹中创…

博客换肤

一直以来觉得博客园里的主题不是特别好&#xff0c;很多模版多多少少都有些美中不足&#xff0c;于是今天抽了点时间把主题改改&#xff0c;哈。幸亏博客园支持自定义样式。 时间有限就先改到这里&#xff0c;今后有时间在进一步完美&#xff0c;呵呵。转载于:https://www.cnbl…

duration java_Java Duration类| 带示例的get()方法

duration java持续时间类get()方法 (Duration Class get() method) get() method is available in java.time package. get()方法在java.time包中可用。 get() method is used to return the value for the given unit. get()方法用于返回给定单位的值。 get() method is a non…

Openmv通过串口接收数据、发送数据与stm32通信

博主联系方式: QQ:1540984562 QQ交流群:892023501 群里会有往届的smarters和电赛选手,群里也会不时分享一些有用的资料,有问题可以在群里多问问。 目录 参考接线星瞳教程openmv传送数据STM32解码程序参考 接线 星瞳教程

c语言尹宝林答案,c程序设计导引 尹宝林

《C程序设计导引》特别适合作为计算机和非计算机专业学生学习高级语言程序设计的教材&#xff0c;也可供计算机等级考试者和其他各类学习者使用参考。17.40定价&#xff1a;44.75(3.89折)/2013-05-01《大学计算机优秀教材系列&#xff1a;C程序设计导引》是一本讲解C程序设计的…

从程序员到项目经理(15):项目管理三大目标

项目管理的三大目标即时间、成本和质量&#xff0c;实际是告诉项目经理应重点关注什么因素&#xff0c;项目控制应该做什么工作。三大目标虽然简单&#xff0c;但如果能将其真正贯彻到自己的行动中&#xff0c;那么对项目计划制定、过程控制等工作&#xff0c;均能起到引导作用…

第十一章 文件

第十一章 文件 打开文件 当前目录中有一个名为beyond.txt的文本文件&#xff0c;打开该文件 调用open时&#xff0c;原本可以不指定模式&#xff0c;因为其默认值就是’r’。 import io f open(beyond.txt)文件模式 值描述‘r’读取模式&#xff08;默认值&#xff09;‘w…

iterator与iterable

用Iterator模式实现遍历集合Iterator模式是用于遍历集合类的标准访问方法。它可以把访问逻辑从不同类型的集合类中抽象出来&#xff0c;从而避免向客户端暴露集合的内部结构。例如&#xff0c;如果没有使用Iterator&#xff0c;遍历一个数组的方法是使用索引&#xff1a; for(i…

Android中的Touch事件处理流程

1、当触摸屏幕时&#xff0c;最先执行的是Activity中的 publicbooleandispatchTouchEvent (MotionEvent ev) {if(ev.getAction() MotionEvent. ACTION_DOWN) {onUserInteraction();}if(getWindow().superDispatchTouchEvent(ev)) {returntrue;}returnonTouchEvent(ev);}如果某…

【TensorFlow学习笔记:神经网络八股】(实现MNIST数据集手写数字识别分类以及FASHION数据集衣裤识别分类)

课程来源&#xff1a;人工智能实践:Tensorflow笔记2 文章目录前言一、搭建网络八股sequential1.函数介绍2.6步法实现鸢尾花分类二、搭建网络八股class1.创建自己的神经网络模板&#xff1a;2.调用自己创建的model对象三、MNIST数据集1.用sequential搭建网络实现手写数字识别2.用…

c语言 在执行区域没有空格,C语言上机操作指导之TurboC.doc

C语言上机操作指导之 -------- Turbo C程序设计是实践性很强的过程&#xff0c;任何程序都必须在计算机上运行&#xff0c;以检验程序的正确与否。因此在学习程序设计中&#xff0c;一定要重视上机实践环节&#xff0c;通过上机可以加深理解 C语言的有关概念&#xff0c;以巩固…

java 根据类名示例化类_Java即时类| from()方法与示例

java 根据类名示例化类即时类from()方法 (Instant Class from() method) from() method is available in java.time package. from()方法在java.time包中可用。 from() method is used to return a copy of the Instant from the given TemporalAccessor object. from()方法用于…

第十二章 图形用户界面

第十二章 图形用户界面 GUI就是包含按钮、文本框等控件的窗口 Tkinter是事实上的Python标准GUI工具包 创建GUI示例应用程序 初探 导入tkinter import tkinter as tk也可导入这个模块的所有内容 from tkinter import *要创建GUI&#xff0c;可创建一个将充当主窗口的顶级组…

Sqlserver 2005 配置 数据库镜像:数据库镜像期间可能出现的故障:镜像超时机制

数据库镜像期间可能出现的故障 SQL Server 2005其他版本更新日期&#xff1a; 2006 年 7 月 17 日 物理故障、操作系统故障或 SQL Server 故障都可能导致数据库镜像会话失败。数据库镜像不会定期检查 Sqlservr.exe 所依赖的组件来验证组件是在正常运行还是已出现故障。但对于某…

江西理工大学期末试卷c语言,2016年江西理工大学信息工程学院计算机应用技术(加试)之C语言程序设计复试笔试最后押题五套卷...

一、选择题1&#xff0e; 设有函数定义&#xff1a;( )。A. B. C. D. 答:A则以下对函数sub 的调用语句中&#xff0c;正确的是【解析】函数的参数有两个&#xff0c;第一个是整型&#xff0c;第二个是字符类型&#xff0c;在调用函数时&#xff0c;实参必须一个是整型&#xff…

第十三章 数据库支持

第十三章 数据库支持 本章讨论Python数据库API&#xff08;一种连接到SQL数据库的标准化方式&#xff09;&#xff0c;并演示如何使用这个API来执行一些基本的SQL。最后&#xff0c;本章将讨论其他一些数据库技术。 关Python支持的数据库清单 Python数据库API 标准数据库API…

【神经网络八股扩展】:自制数据集

课程来源&#xff1a;人工智能实践:Tensorflow笔记2 文章目录前言1、文件一览2、将load_data()函数替换掉2、调用generateds函数4、效果总结前言 本讲目标:自制数据集&#xff0c;解决本领域应用 将我们手中的图片和标签信息制作为可以直接导入的npy文件。 1、文件一览 首先看…

java 批量处理 示例_Java中异常处理的示例

java 批量处理 示例Here, we will analyse some exception handling codes, to better understand the concepts. 在这里&#xff0c;我们将分析一些异常处理代码 &#xff0c;以更好地理解这些概念。 Try to find the errors in the following code, if any 尝试在以下代码中…

hdu 1465 不容易系列之一

http://acm.hdu.edu.cn/showproblem.php?pid1465 今天立神和我们讲了错排&#xff0c;才知道错排原来很简单&#xff0c;从第n个推起&#xff1a; 当n个编号元素放在n个编号位置,元素编号与位置编号各不对应的方法数用M(n)表示,那么M(n-1)就表示n-1个编号元素放在n-1个编号位置…