/*
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
更多文章、技術交流、商務合作、聯系博主
微信掃碼或搜索:z360901061
微信掃一掃加我為好友
QQ號聯系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元

