用儲存過程將查詢結果匯出到

2021-04-02 20:06:54 字數 3288 閱讀 2918

/*--資料匯出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="+';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

go

postgresql 將查詢結果匯出到檔案

方法1 進入查詢終端,輸入 o aa.out 查詢結果將輸出到當前目錄的aa.out 檔案 方法2 將查詢語句寫a.sql中,alias sql2 export pgpassword xx psql h 192.168.1.107 p 5439 u dev d data資料庫名 sql2 c a.s...

將mysql的查詢結果匯出為csv

要將mysql的查詢結果匯出為csv,一般會使用php連線mysql執行查詢,將返回的查詢結果使用php生成csv格式再匯出。但這樣比較麻煩,需要伺服器安裝php才可以實現。我們可以使用 into outfile,fields terminated by,optionally enclosed by...

SQL Server 將查詢結果匯出插入的簡單方式

1 首先將查詢結果新增到一個原資料庫中不存在的表,表名隨意命名。例 select into sys gwjsdybak from sys gwjsdy where jsdm in 0101 0102 0103 0106 這個sys gwjsdybak就是不存在的表名,執行時會自動新建sys gwjs...

mysql將查詢結果儲存到檔案

1.新建查詢語句檔案query.sql,內容如下 set names utf8 select feedid,city message from feed limit 1000 上面的set names utf8語句是設施當前使用的編碼,如果編碼和資料庫的編碼不一致,會出現亂碼 2.執行如下 root...

利用python將hive查詢結果儲存到mysql

python指令碼連線hive獲取返回值 此指令碼支援add jar file 使用者hive查詢結果的返回值更新mysql指定表指定欄位 def mysqlexe sql conn mysqldb.connect host 10.10.111.111 user user passwd passwo...