sql server 帶列名匯出至excel

2021-04-12 20:20:40 字數 3419 閱讀 1229

--sql語句就用下面的儲存過程

/*--資料匯出excel

匯出查詢中的資料到excel,包含欄位名,檔案為真正的excel檔案

,如果檔案不存在,將自動建立檔案

,如果表不存在,將自動建立表

基於通用性考慮,僅支援匯出標準資料型別

--鄒建 2003.10--*/

/*--呼叫示例

p_exporttb @sqlstr='select * from 地區資料'

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

--*/

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]

gocreate 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=;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('**alldatetime','datetime') then 'datetime'

when b.name in('money','**allmoney') 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

mysql快速匯出資料(帶列名)

set table name user sample0528 set schema name douyin set output name concat e douyin mysql output table name,txt set cols null select group concat co...

sqlserver匯出表結構至Excel

開啟sqlserver新建查詢 use 庫名 select 表名 case when a.colorder 1then d.name else end 表說明 case when a.colorder 1then isnull f.value,else end 字段序號 a.colorder,欄位名...

SQL Server列名顯示無效

在sqlserver中,當設計 修改 表結構之後,再用sql語句時,列名會顯示無效,但執行可以通過 原因是sql server的intellisense 智慧型感知功能 需要重新整理一下,用快捷鍵ctrl shift r即可 關於intellisense 智慧型感知功能 的主要功能,就是在使用者具有...