sql server 帶列名導出至excel

2020-12-12 站長之家
以下為引用的內容:

--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]
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

相關焦點

  • 數據科學 | pandas數據導入與導出
    當我們開始著手做一個數據分析項目時,選擇和導入數據集是第一個步驟,而導出數據雖然非必需,但有時候我們也需要保存處理或者分析後的結果,方便下次使用。在pandas中,它已經為我們提供了很多不同格式數據的導入和導出方法,下面這篇文章將具體介紹一些較為常用的方法,包括excel、csv文件以及資料庫的導入導出等。數據導入和導出是pandas中很基礎且重要的一個部分。
  • 利用圖形界面從SQL導入導出到MySQL
    從sql導出到mysql的方法很多,現介紹一種無需編程,直接利用sql和mysql裡的圖形界面進行導入導出的簡單方法。前提是已經安裝了sqlserver客戶端和mysql的圖形界面管理工具 phpmyadmin。
  • SQL Server 2014
    解壓「cn_sql_server_2014_X64.iso」64位系統解壓「cn_sql_server_2014_X64.iso」。右擊「cn_sql_server_2014_X64.iso」點擊「解壓到cn_sql_server_2014_X64.iso」。
  • 【參賽作品22】關於遷移SQL server到openGauss的問題和解決
    多表查詢基本相同,如下:集函數用法基本一致主要是系統表的使用差別SQL serveropenGauss解決sysobjects可用表名查詢剛開始使用PG_OBJECT表,此表只能按id查詢代替:PG_TABLES中可用表名查詢可用系統表sys.columns.object_id查詢某表所有列名openGauss中可用information_schema
  • 百萬級別數據Excel導出優化
    這篇文章不是標題黨,下文會通過一個仿真例子分析如何優化百萬級別數據Excel導出。筆者負責維護的一個數據查詢和數據導出服務是一個相對遠古的單點應用,在上一次雲遷移之後擴展為雙節點部署,但是發現了服務經常因為大數據量的數據導出頻繁Full GC,導致應用假死無法響應外部的請求。
  • SQL Server 2019安裝教程
    1、選中下載的【sql_server_2019】軟體壓縮包,滑鼠右擊選擇【解壓到sql_server_2019】。2、雙擊打開解壓後的【sql_server_2019】文件夾。3.滑鼠右擊【sql_server_2019.iso】,選擇【打開方式】-【Windows資源管理器】。
  • SQL Server 安裝步驟
    本文通過圖文並茂的形式給大家介紹了SQL server 2016 安裝步驟,非常不錯,具有參考借鑑價值,需要的朋友參考下吧。
  • 不一樣的 SQL Server 日期格式化
    output:DateTime Result Custom Number Result ---- 27/09/2012 123-45-6789 (1 row(s) affected) Referencehttps://docs.microsoft.com/en-us/sql
  • ng-notadd 0.15 發布,新增表格及 excel 導出
    新功能普通表格數據表格動態表格excel 導出 (可指定行,列)功能技術棧TypescriptAngular
  • 如何將SQL Server中的表變成txt文件
    每個批處理作為一個事務複製至伺服器。SQL Server 提交或回滾(在失敗時)每個批處理的事務。默認情況下,指定的數據文件中的所有數據都作為一批覆制。請不要與 -h "ROWS_PER_BATCH = bb" 選項一起使用。 -n 使用數據的本機(資料庫)數據類型執行大容量複製操作。此選項不提示輸入每一欄位,它將使用本機值。
  • Windows下Laravel 7.0連接sql server - php中文網
    laravel 7.0 默認連接 mysql, 同時項目需要連接 sql servel (另一個系統應用)$users = DB::connection (『php_sqlsrv』)->select (…);
  • SQL Server應用程式的高級Sql注入
    [概 要] 這篇文章討論常用的"sql注入"技術的細節,應用於流行的Ms IIS/ASP/SQL-Server平臺。這裡探討有關這種攻擊各種可以注入程序訪問數據和資料庫防範的方法。= "select * from users where username = '" + username + "' and password = '" + password + "'"; trace( "query: " + sql ); rso.open( sql, cn ); if (rso.EOF) { rso.close(); %〉
  • excel圖片導出的方法
            excel教程中圖片導出的操作應該怎樣進行呢?  假設一個excel工作表中有上百張圖片,如何批量導出到某一文件夾呢?  excel圖片導出的方法如下介紹。
  • mysql常用sql語句總結
    1 列類型1 列1參數,列名2 列類型2 列2參數,....;修改列類型Alter table 表名 modify 列名 新類型 新參數; (不能修改列名);例:alter table m1 modify gender char(4) not null default '';修改列名及列類型Alter table 表名 change 舊列名
  • 資料庫sql 學習
    sql 用於訪問和處理資料庫的標準計算機語言rdbms 關係型資料庫管理系統ANSI 美國國家標準化組織
  • SQL Server的Descending Indexes降序索引
    OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]) ON [PRIMARY]GO 插入測試數據DECLARE @i INT;DECLARE @sql
  • 鞏固SQL - 窗口函數&變量&數據透視圖
    但作為合格的一個數據分析師,sql的精通肯定是必不可少的,所以最近瘋狂刷sql題,同時也來總結下我以前比較少用的語法。2、窗口函數基本語法分析函數 over(partition by 列名 order by 列名 )2.1、分析函數分類聚合類avg(列名)、sum(列名)、count(列名)、max(列名)、min(列名)排名類row_number() 按照值排序時產生一個自增編號,不會重複rank() 按照值排序時產生一個自增編號
  • 「SQL」重點整理
    4.視圖:從一張或多張表中導出的表。4.日期/時間數據類型:用於存儲日期類型和事件類型的組合數據:datetime、smalldatetime、date、datetime(2)、datetimestampoffset5.字符數據類型:用於存儲各種字母、數字和特殊符號:char、varchar、nchar(n)、nvarchar(n)--純英文或者數字可以不帶n
  • 如何使用 SQL Server FILESTREAM 存儲非結構化數據?
    SqlConnection sqlConnection = new SqlConnection("Integrated Security=true;server=(local)");SqlCommand sqlCommand = new SqlCommand();sqlCommand.Connection