日韩久久久精品,亚洲精品久久久久久久久久久,亚洲欧美一区二区三区国产精品 ,一区二区福利

SQLServer2000把指定查詢輸出為Excel文件的存儲

系統 2050 0
?
SET ?QUOTED_IDENTIFIER? ON ?
GO
SET ?ANSI_NULLS? ON ?
GO



ALTER ??? proc ?stp_ExportTable
????
@sqlstr ? nvarchar ( 4000 ),???????? -- 查詢語句,如果查詢語句中使用了order?by?,請加上top?100?percent,注意,如果導出表/視圖,用上面的存儲過程
???? @orderstr ? nvarchar ( 255 ),???? -- Order?by?Field
???? @path ? nvarchar ( 1000 ),??????? -- 文件存放目錄
???? @fname ? nvarchar ( 250 ),??????? -- 文件名
???? @sheetname ? varchar ( 250 ) = '' ?????? -- 要創建的工作表名,默認為文件名
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
????
-- 參數檢測
???? if ? isnull ( @fname , '' ) = '' ? set ? @fname = ' temp.xls '
????
if ? isnull ( @sheetname , '' ) = '' ? set ? @sheetname = replace ( @fname , ' . ' , ' # ' )
????
????
-- 檢查文件是否已經存在
???? if ? right ( @path , 1 ) <> ' ' ? set ? @path = @path + ' '
????
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 + ' " '



????
-- 連接數據庫
???? -- 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

????
-- 構造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'
???? -- 導入數據
????
????
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文件的存儲過程


更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

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

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 福鼎市| 安徽省| 彩票| 西藏| 靖安县| 通江县| 宁晋县| 鹤山市| 木兰县| 潞城市| 息烽县| 文昌市| 拜泉县| 尤溪县| 曲靖市| 安图县| 华亭县| 日照市| 南部县| 锡林郭勒盟| 珠海市| 盐池县| 嘉善县| 清镇市| 广元市| 宣威市| 德江县| 邓州市| 华池县| 云浮市| 桐梓县| 枣阳市| 余姚市| 车险| 余庆县| 无为县| 望都县| 小金县| 萝北县| 永靖县| 新绛县|