亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

SQLServer2000把指定查詢輸出為Excel文件的存儲(chǔ)

系統(tǒng) 1910 0
?
SET ?QUOTED_IDENTIFIER? ON ?
GO
SET ?ANSI_NULLS? ON ?
GO



ALTER ??? proc ?stp_ExportTable
????
@sqlstr ? nvarchar ( 4000 ),???????? -- 查詢語(yǔ)句,如果查詢語(yǔ)句中使用了order?by?,請(qǐng)加上top?100?percent,注意,如果導(dǎo)出表/視圖,用上面的存儲(chǔ)過(guò)程
???? @orderstr ? nvarchar ( 255 ),???? -- Order?by?Field
???? @path ? nvarchar ( 1000 ),??????? -- 文件存放目錄
???? @fname ? nvarchar ( 250 ),??????? -- 文件名
???? @sheetname ? varchar ( 250 ) = '' ?????? -- 要?jiǎng)?chuàng)建的工作表名,默認(rèn)為文件名
as ?
????
declare ? @err ? int , @src ? nvarchar ( 255 ), @desc ? nvarchar ( 255 ), @out ? int
????
declare ? @obj ? int , @constr ? nvarchar ( 1000 ), @sql ? varchar ( 4000 ), @fdlist ? varchar ( 8000 )
????
declare ? @IstmpTB ? as ? bit
????
declare ? @tmpsql ?? as ? varchar ( 4000 )


????
SET ? @IstmpTB = 0
????
-- 參數(shù)檢測(cè)
???? if ? isnull ( @fname , '' ) = '' ? set ? @fname = ' temp.xls '
????
if ? isnull ( @sheetname , '' ) = '' ? set ? @sheetname = replace ( @fname , ' . ' , ' # ' )
????
????
-- 檢查文件是否已經(jīng)存在
???? if ? right ( @path , 1 ) <> ' ' ? set ? @path = @path + ' '
????
create ? table ?#tb(a? bit ,b? bit ,c? bit )
????
set ? @sql = @path + @fname

????
-- 數(shù)據(jù)庫(kù)創(chuàng)建語(yǔ)句
???? 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 + ' " '



????
-- 連接數(shù)據(jù)庫(kù)
???? -- print?'nn33'
???? exec ? @err = sp_oacreate? ' adodb.connection ' , @obj ?out
????
if ? @err <> 0 ? goto ?lberr
????
-- print?'nn44'
???? exec ? @err = sp_oamethod? @obj , ' open ' , null , @constr
????
if ? @err <> 0 ? goto ?lberr

????
-- 構(gòu)造temp表的SQL
???? declare ? @tbname ?sysname
????
set ? @tbname = ' ##tmp_ ' + convert ( varchar ( 38 ), newid ())
????
set ? @sql = ' select?*?into?[ ' + @tbname + ' ]?from( ' + @sqlstr + ' )?a '
????
-- print?@sql
???? exec ( @sql )
????
set ? @IstmpTB = 1
????
????
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 ( ' bit ' , ' int ' , ' bigint ' , ' tinyint ' , ' smallint ' )? 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 = substring ( @sql , 2 , 2000 ), @fdlist = substring ( @fdlist , 2 , 2000 )

????
-- create?table
???? select ? @sql = ' create?table?[ ' + @sheetname + ' ]( ' + @sql + ' ) '
????
-- print?@sql
???? exec ? @err = sp_oamethod? @obj , ' execute ' , @out ?out, @sql
????
if ? @err <> 0 ? goto ?lberr
????
-- print?'nn'
???? -- destroy?ole?object
???? exec ? @err = sp_oadestroy? @obj
????
if ? @err <> 0 ? goto ?lberr
????
-- print?'nn1'
???? -- 導(dǎo)入數(shù)據(jù)
????
????
set ? @sql = ' openrowset( '' MICROSOFT.JET.OLEDB.4.0 '' , '' Excel?8.0;HDR=YES
???????;DATABASE=
' + @path + @fname + ''' ,[ ' + @sheetname + ' $]) '
????
????
set ? @tmpsql = ' insert?into? ' + @sql + ' ( ' + @fdlist + ' )?select? ' + @fdlist + ' ?from?[ ' + @tbname + ' ] '
????
-- print?@tmpsql
???? if ? @orderstr ? is ? not ? null ? or ? @orderstr <> ''
????
begin
????????
set ? @tmpsql = @tmpsql + ' ?order?by? ' + @orderstr
????
end
????
-- print?@tmpsql????
???? exec ( @tmpsql )
????
????
set ? @sql = ' drop?table?[ ' + @tbname + ' ] '
????
exec ( @sql )
????
set ? @IstmpTB = 0
????
????
return ? 0

lberr:
???
???????
EXEC ?sp_displayoaerrorinfo? @obj ,? @err
????
-- DELETE?TmpTable?While?Error?
???? IF ? @IstmpTB = 1 ?
????
BEGIN
????????
set ? @sql = ' drop?table?[ ' + @tbname + ' ] '
????????
exec ( @sql )
????
END
????
return ? - 1
lbexit:
????
SELECT ? @sql , @constr , @fdlist


GO
SET ?QUOTED_IDENTIFIER? OFF ?
GO
SET ?ANSI_NULLS? ON ?
GO

SQLServer2000把指定查詢輸出為Excel文件的存儲(chǔ)過(guò)程


更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號(hào)聯(lián)系: 360901061

您的支持是博主寫(xiě)作最大的動(dòng)力,如果您喜歡我的文章,感覺(jué)我的文章對(duì)您有幫助,請(qǐng)用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長(zhǎng)非常感激您!手機(jī)微信長(zhǎng)按不能支付解決辦法:請(qǐng)將微信支付二維碼保存到相冊(cè),切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對(duì)您有幫助就好】

您的支持是博主寫(xiě)作最大的動(dòng)力,如果您喜歡我的文章,感覺(jué)我的文章對(duì)您有幫助,請(qǐng)用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長(zhǎng)會(huì)非常 感謝您的哦!!!

發(fā)表我的評(píng)論
最新評(píng)論 總共0條評(píng)論
主站蜘蛛池模板: 亚洲欧美日韩中文在线 | 国产精品一区二区久久沈樵 | 成人免费毛片观看 | aaaa一级片 | 日本三级带日本三级带黄首页 | 欧美日韩久久中文字幕 | 精品免费 | 亚洲12色吧 | 久久99精品久久久久久三级 | 福利在线免费 | 欧美色视频日本片免费高清 | 99视频精品全部 在线 | 伊人久久影视 | 欧美成人三级一区二区在线观看 | 亚洲欧美日韩在线观看二区 | 日本一区二区三区中文字幕 | 天天干夜夜谢 | 综合久久久久 | 女人精69xxxxx免费无毒 | 99国产精品免费视频 | 久久国产精品高清一区二区三区 | 一级毛片高清大全免费观看 | 久久精品午夜视频 | 在线日本妇人成熟免费观看 | 777午夜精品被窝影院 | 色综合夜夜嗨亚洲一二区 | 国产欧美成人一区二区三区 | 玖玖在线| 亚洲二三区 | 九九精品国产 | 欧美一级片网址 | 久久免费香蕉视频 | 自拍亚洲午夜伦li片影院 | 性xxxx奶大欧美高清 | 国产精品日韩一区二区三区 | 欧美综合亚洲 | 日韩亚洲视频 | 精品亚洲欧美中文字幕在线看 | 亚洲国产日韩欧美 | 日本一级毛片视频网站 | 久久久美女 |