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

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)論
主站蜘蛛池模板: 国产亚洲欧美日韩综合综合二区 | 久草国产视频 | 午夜在线视频网站 | 日韩精品一区二区三区四区 | 国产精品毛片 | 欧美日韩视频在线播放 | 手机看片国产精品 | 天天爽天天碰狠狠添 | 人人做人人性 | 香蕉视频网站在线播放 | 福利资源站 | 一级做a免费视频观看网站 一级做a爰片久久毛片唾 | 一本大道久久香蕉成人网 | 亚洲一区二区三区香蕉 | 国产乱子伦手机在线 | 欧美精品久久久久久久影视 | 99在线精品免费视频 | 亚洲国产午夜精品理论片的软件 | 久久国产欧美日韩精品 | 亚洲国产成人在线观看 | 日本不卡网站 | 日本一区二区三区四区五区 | 欧美视频在线观看 | 五月狠狠亚洲小说专区 | 精品久久伦理中文字幕 | 国产成人欧美一区二区三区的 | 尹人香蕉久久99天天拍欧美p7 | 青青青在线视频 | 亚洲五月综合网色九月色 | 久久视频这里只有精品 | 夜色视频网站 | 国产精品18久久久久久久久久 | 久久久久久麻豆 | 天天干天天操天天射 | 中国国产一级毛片 | 综合色在线 | 亚洲69视频| 成年人免费在线视频 | 国产综合久久久久久鬼色 | 国产成人精品在视频 | 人成午夜欧美大片免费视频 |