posts - 325,  comments - 25,  trackbacks - 0

          ------------------sqlserver 按條件導出數據為.xls---------------------------
          if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[p_exporttb]') and


          OBJECTPROPERTY(id, N'IsProcedure') = 1)

          drop procedure [dbo].[p_exporttb]

          GO


          create proc p_exporttb

          @sqlstr sysname, --查詢語句,如果查詢語句中使用了order by ,請加上top 100 percent,注意,如果導

          @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(8000),@fdlist varchar(8000)


          --參數檢測

          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 5.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 5.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

          調用: 

          p_exporttb @sqlstr='select username,branch_name from branch_arch, sys_user where sys_user.branch_no=branch_arch.branch_no'

          ,@path='c:/',@fname='aa1.xls',@sheetname='地區資料'

          --*/

          posted on 2008-08-14 17:31 長春語林科技 閱讀(768) 評論(0)  編輯  收藏 所屬分類: util
          <2008年8月>
          272829303112
          3456789
          10111213141516
          17181920212223
          24252627282930
          31123456

           

          長春語林科技歡迎您!

          常用鏈接

          留言簿(6)

          隨筆分類

          隨筆檔案

          文章分類

          文章檔案

          相冊

          收藏夾

          搜索

          •  

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 丹巴县| 高密市| 金山区| 长子县| 青田县| 梁山县| 安乡县| 老河口市| 株洲市| 鄢陵县| 新绛县| 尼玛县| 大竹县| 平潭县| 卢湾区| 莎车县| 宁津县| 甘泉县| 吴江市| 乳山市| 大关县| 海安县| 石棉县| 富蕴县| 禄劝| 保德县| 宝兴县| 独山县| 新绛县| 曲阳县| 平和县| 安徽省| 怀远县| 繁昌县| 临西县| 尼玛县| 长丰县| 蒲城县| 元谋县| 武城县| 鹿泉市|