--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 智慧型感知功能 的主要功能,就是在使用者具有...