设为首页 收藏本站
查看: 910|回复: 0

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

[复制链接]

尚未签到

发表于 2015-5-29 08:35:44 | 显示全部楼层 |阅读模式
/*
     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   @err0   goto   lberr  
  exec   @err=sp_oamethod   @obj,'open',null,@constr  
  if   @err0   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   @err0   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
  

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-71682-1-1.html 上篇帖子: Linux 下搭建FTP服务器 下篇帖子: net 2.0(c#)下简单的FTP应用程序
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表