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 長春語林科技 閱讀(769) 評論(0)  編輯  收藏 所屬分類: util
          <2008年8月>
          272829303112
          3456789
          10111213141516
          17181920212223
          24252627282930
          31123456

           

          長春語林科技歡迎您!

          常用鏈接

          留言簿(6)

          隨筆分類

          隨筆檔案

          文章分類

          文章檔案

          相冊

          收藏夾

          搜索

          •  

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 阳曲县| 句容市| 汶川县| 巴彦县| 晋江市| 宾川县| 云南省| 锦州市| 云霄县| 纳雍县| 贵溪市| 三门县| 广元市| 郴州市| 五家渠市| 西盟| 金华市| 婺源县| 都昌县| 尤溪县| 武陟县| 武穴市| 岑溪市| 阜阳市| 舞阳县| 通榆县| 修水县| 嘉峪关市| 镇沅| 宜都市| 江源县| 黄梅县| 凤城市| 德令哈市| 韶山市| 金平| 股票| 恩平市| 台东县| 宁波市| 石屏县|