當前位置:首頁 » 編程語言 » sql語句導出為表格
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

sql語句導出為表格

發布時間: 2022-06-08 15:57:31

『壹』 如何把sqlServer表數據導出為Excel文件

1、首先打開軟體,可以看到,資料庫中有一張student表,現在要把這張表中的數據導出成excel文件。

『貳』 把SQL資料庫表導入到Excel表

果從SQL資料庫中,導出數據到Excel,如果Excel文件已經存在,而且已經按照要接收的數據創建好表頭,就可以簡單的用:
insert
into
OPENROWSET('MICROSOFT.JET.OLEDB.4.0'
,'Excel
5.0;HDR=YES;DATABASE=c:test.xls',sheet1$)
select
*
from

--如果Excel文件不存在,也可以用BCP來導成類Excel的文件,注意大小寫:
--導出表的情況
EXEC
master..xp_cmdshell
'bcp
pubs.dbo.authors
out
c:\temp1.xls
-c
-q
-S"HUAWEI-CECF7A04"
-U"sa"
-P"sa"''
執行SQL語句導出:
EXEC
master..xp_cmdshell
'bcp
"SELECT
au_fname
FROM
pubs.dbo.authors"
queryout
c:\temp1.xls
-c
-S"HUAWEI-CECF7A04"
-U"sa"
-P"sa"'
注意以上c:\temp1.xls必須不存在
使用CopyFromRecordset將一個記錄集中的所有記錄一起寫入EXCEL
示例
本示例將
DAO
Recordset
對象中的欄位名稱復制到工作表的第一行中,並將這些名稱的格式設為加粗。然後,本示例將記錄集復制到工作表中,復制的起始位置在
A2
單元格。
For
iCols
=
0
to
rs.Fields.Count
-
1
ws.Cells(1,
iCols
+
1).Value
=
rs.Fields(iCols).Name
Next
ws.Range(ws.Cells(1,
1),
_
ws.Cells(1,
rs.Fields.Count)).Font.Bold
=
True
ws.Range("A2").CopyFromRecordset
rs

『叄』 sql導出到excel的語句怎麼寫

insert
into
OPENROWSET
('MICROSOFT.JET.OLEDB.4.0'
,'Excel
5.0;HDR=YES;DATABASE=你的
工作簿
路徑及名稱.xls',工作表名或命名區域)
select
distinct
estate,address,no,room,name,tel
from
house
where
estate
like'%江蘇%'

『肆』 在SQL中如何將查詢結果直接導出為EXCEL表格

SQL Server有一些工具可用來導出和導入數據。這些簡單的工具,例如T-SQL的BULK INSERT語句,或者是BCP工具,都可以將數據以純文本文件的形式傳輸。如果需要處理任何一種其他類型的文件的導入導出,則我們必須使用DTS設計器或者DTS向導構建一個DTS包。最終生成的DTS包是一個我們必須測試、維護和操作的獨立的對象。而傳輸數據的工作則變得更加復雜,即使我們只是想要將一個簡單的Excel文件傳輸到文件系統中。

這里,我建議使用一個簡單,但是很有用的T-SQL 存儲程序,它可以通過使用鏈接伺服器(linked server)技術將數據導出到Excel 中。

為了實現導出,你必須首先創建一個空的有固定名字的Excel文件,並將其放置在伺服器上。我把它命名為Empty.xls,並放置在c:temp的目錄下。這個文件不會被刪除,並且在裝入數據之前,作為目標Excel文件的模板使用。

Empty.xls文件被構建的時候,只含有一個工作頁,名為ExcelTable,其中的第一行(僅有的一行)包含如下字母: A,B,C,...Z。這些字母可作為Excel表的列名稱。這意味著在一個查詢中,我們可以導出26個列。(給定的存儲程序代碼可被修改,以支持結果集中含有更多的列的情況。只需要在Excel模板中簡單地書寫F1, F2 ,F3...,然後更改程序中相應列的列表即可反映出變化了。)

sp_write2Excel是一個T-SQL存儲過程,它獲取目標Excel文件的名字和路徑,結果集中列的數量,以及T-SQL查詢。在查詢中應該使用轉換函數將所有的非字元串數據導入列中,因為最終的Excel單元中數據實際上都是字元串格式的。

這個過程將empty.xls模板文件拷貝到新的目標Excel文件中。然後它再構建一個鏈接伺服器到剛才的文件中,並使用動態的T-SQL來構建這個Excel文件,並且使用插入/選擇語句來將數據寫入其中。

以下是程序代碼:
Create proc sp_write2Excel (@fileName varchar(100),
@NumOfColumns tinyint,
@query varchar(200))
as
begin
declare @dosStmt varchar(200)
declare @tsqlStmt varchar(500)
declare @colList varchar(200)
declare @charInd tinyint

set nocount on

-- 構建列的列表 A,B,C ...
-- 直到達到列的數量.

set @charInd=0
set @colList = 'A'
while @charInd < @NumOfColumns - 1
begin
set @charInd = @charInd + 1
set @colList = @colList + ',' + char(65 + @charInd)
end

-- 創建一個空的Excel 文件作為目標文件,通過拷貝模板Excel 文件來命名
set @dosStmt = ' c:tempempty.xls ' + @fileName
exec master..xp_cmdshell @dosStmt

-- 創建一個「臨時」的鏈接伺服器到剛才的文件中,以用於「導出」數據
EXEC sp_addlinkedserver 'ExcelSource',
'Jet 4.0',
'Microsoft.Jet.OLEDB.4.0',
@fileName,
NULL,
'Excel 5.0'

-- 構建一個T-SQL 語句,用於實際導出查詢結果
-- 到目標鏈接伺服器上的表中
set @tsqlStmt = 'Insert ExcelSource...[ExcelTable$] ' + ' ( ' + @colList + ' ) '+ @query

print @tsqlStmt

-- 執行動態的 TSQL語句
exec (@tsqlStmt)

-- 刪除鏈接伺服器
EXEC sp_dropserver 'ExcelSource'
set nocount off
end
GO

程序使用實例:
Use master
go
exec sp_write2Excel
--目標excel文件
'c:tempNorthProcts.xls' ,

-- 結果中列的數量
3,

-- 將要導出結果的查詢
'select convert(varchar(10),ProctId),
ProctName,
Convert (varchar(20),UnitPrice) from Northwind..Procts'

結論,這個程序可作為一個通用的工具將數據導出到Excel工作頁中,而BCP工具則只能將數據導出到文本文件中。

我們可以使用這個程序來代替DTS包設計器,以及DTS向導,每當需要調用這樣的動作的時候,都可以用它將數據導出到excel 文件中。

『伍』 如何將SQL server 2008 里的查詢結果導出到 Excel 表內

1、首先打開SQL server 2008 應用程序,進入到程序操作頁面中,選擇需要編輯的表。

『陸』 怎樣將SQL中的表導出為excel

SQLServer表數據導出為Excel文件
一、少量數據導出
1、在查詢分析器中,使用SQL語句檢索要導出的數據
2、選中所有數據,點擊滑鼠右鍵,選擇另存為CSV文件
3、用EXCEL把CSV文件另存為xls文件。
二、表格批量導出
1、開始菜單選擇"導入和導出數據"
2、選擇要導出的資料庫,如圖配置
3、設置導出目標
4、設置目標文件
5、選擇篩選數據發送
6、選擇導出的表格
7、完成設置

『柒』 怎麼定時自動將SQL數據導出為Excel文件

1、編寫SQL存儲過程(procere);
2、使用SQL的BCP與exec master..xp_cmdshell命令完成指定數據表或內容導出;
3、使用SQL Server代理作業實現定時自動執行導出。
下面是過程詳解,若你還有更好的方式,盼告知。

工具/原料

SQL Server Management Studio
BCP與exec master..xp_cmdshell
方法/步驟

1
Create一個新的procere,在開頭可以做一個判斷來決定什麼時候執行數據結果導出,下面來看看這個存儲過程:
Create procere [dbo].[pr_Dept_Bak]

as
begin
---這里可以增加對數據表的查詢條件或更多的數據處理;
---將結果放入一個新的數據表,然後將這個新表導出EXCEL文件;
declare @file_path varchar(200);--導出EXCEl文件的路徑;
declare @file_name varchar(200);--導出EXCEl的文件名;
declare @exec_sql varchar(200);--SQL語句;
---分開定義是為了以後修改路徑或文件名更方便。
set @file_path = 'E:\Dept_Bak\'
set @file_name = 'dept' + CONVERT(varchar(100), GETDATE(), 112)+'.xls'
set @exec_sql = 'select * from book.dbo.users_dept' ---數據表使用的完整路徑;
set @exec_sql = ' bcp "'+@exec_sql+'" queryout "'+@file_path+''+@file_name+'" -c -T -U "sa" -P "SQLpassword"';
----U "sa" -P "SQLpassword" 這是資料庫的sa賬號和密碼;
exec master..xp_cmdshell @exec_sql
end

2
以上存儲過程pr_Dept_Bak建立,需要導出的數據表是users_dept,導出的位置是資料庫本地計算機的E:\Dept_Bak文件夾下。需要將這個文件夾建立好。

3
准備好之後,我們需要進行測試一下pr_Dept_Bak是否成功,執行pr_Dept_Bak存儲過程,可以看到執行結果是成功的,若這里不成功,則需要檢查一下帶存儲過程中的BCP與exec master..xp_cmdshell命令的格式是否正確。

4
導出功能實現了,現在需要設置定時自動執行導出。在SQL Server Management Studio中,SQL Server代理-作業-新建作業。

5
為新的作業設定名稱,可以中文或英文,只是為了方便區分其它作業。

6
在步驟中,點擊新建作業執行步驟。即需要定時自動執行的存儲過程pr_Dept_Bak。為什麼使用的存儲過程,也是因為以後需要添加或修改功能更方便,而且存儲過程更文件測試問題所在。

7
注意選擇資料庫,命令中輸入exec pr_Dept_Bak 執行存儲過程。因為命令語句都在存儲過程中,所以這里就相對比較簡單。

8
最後就是設定定時自動執行計劃,如每天的XX時間自動執行這個存儲過程,或間隔多少小時導出SQL表一次。

9
作業建立之後,則可以執行作業步驟來測試一次,是成功,右鍵點擊建立的作業pr_Dept_Bak,作業開始步驟。

10
作業成功,若不成功,可以看到錯誤提示,可以在作業活動監視器中查看作業失敗的原因,針對解決問題。

11
到E:\Dept_Bak文件夾下,可以看到導出的EXCEL文件了,接下來還可以使用的SQL的郵件功能,自動將這個EXCEL文件發送給指定的郵箱接收者。

『捌』 如何利用SQL查詢語句從SQLSERVER資料庫中導入導出EXCEL表格

一、從excel表導入到SQLSERVER
use test
go
select * into test_table from
OpenRowSet('microsoft.jet.oledb.4.0','Excel 8.0;HDR=yes;database=c:\11.xls;','select * from [結果$]')
--1.通過Sql Server查詢分析器查詢D:\abc.xls 裡面表 sheet1
SELECT * FROM OpenDataSource( 'Microsoft.Jet.OLEDB.4.0','Data Source="D:\abc.xls";User ID=Admin;Password=;Extended properties=Excel 5.0')...[Sheet1$]
--2.如果表a存在,並且表a的結構與上一步的查詢的結構一樣
可以使用
insert into a SELECT * FROM OpenDataSource( 'Microsoft.Jet.OLEDB.4.0','Data Source="D:\abc.xls";User ID=Admin;Password=;Extended properties=Excel 5.0')...[Sheet1$]
--3.如果表a不存在,使用into a
SELECT * into a FROM OpenDataSource( 'Microsoft.Jet.OLEDB.4.0','Data Source="D:\abc.xls";User ID=Admin;Password=;Extended properties=Excel 5.0')...[Sheet1$]
說明:test_table為SQLSERVER資料庫中的表,11.xls是EXCEL表,[結果$]是EXCEL表中的工作表,注意寫法是工作表名加上$符號。
2從SQLSERVER資料庫中導出到EXCEL(一般用語句導庫是在應用程序中,利用各種語言實現,如果不做開發項目,用DTS就很好了,在
SQLSERVER查詢器中利用單條SQL語句實現導入導出不方便,類型轉換是個問題,不好解決)
第一種,無法導入欄位名:(excel表不存在,新建)
EXEC master..xp_cmdshell
'bcp zhou.dbo.資料庫表名 out "c:\test.xls" /c /S "伺服器名" /U "用戶名" -P "密碼" '
第二種,excel文件已存在,要手工把表欄位名填到excel文件中去,再執行下面:
insert into OPENROWSET('MICROSOFT.JET.OLEDB.4.0'
,'Excel 8.0;HDR=YES;DATABASE=c:\文件名.xls',sheet1$)
select * from 表名
第三種,想實現全自動轉欄位名和記錄,一條語句實現不了,要用到過程,當然如果要做一個自動轉換程序,用VB或者VC語言也可實現。
把下面的過程全拷入SQLSERVER查詢分析器,執行,生成一個過程,過程名為:p_exporttb,然後按應用例子執行過程就OK了,自
動導表
/*******************************/
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[p_exporttb]') and OBJECTPROPERTY(id, N'IsProcere') = 1)
drop procere [dbo].[p_exporttb]
GO
create proc p_exporttb
@sqlstr varchar(8000), --查詢語句,如果查詢語句中使用了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 8.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 like '%char'
then case when a.length>255 then 'memo'
else 'text('+cast(a.length as varchar)+')' end
when b.name like '%int' or b.name='bit' then 'int'
when b.name like '%datetime' then 'datetime'
when b.name like '%money' then 'money'
when b.name like '%text' then 'memo'
else b.name end
FROM tempdb..syscolumns a left join tempdb..systypes b on a.xtype=b.xusertype
where b.name not in('image','uniqueidentifier','sql_variant','varbinary','binary','timestamp')
and a.id=(select id from tempdb..sysobjects where name=@tbname)
if @@rowcount=0 return
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 8.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

『玖』 如何將sqlserver 上百萬行的表導出到excel

  • 方法一:對於會寫查詢SQL語句的則是直接寫查詢語句查詢出結果。如下圖:

『拾』 使用SQL語句輸出表格

CREATETABLEa(idINT,NAMEVARCHAR(10),classVARCHAR(10))
INSERTINTOdbo.a
(id,NAME,class)
SELECT1,'張三','語文'
UNIONALL
SELECT2,'張三','英語'
UNIONALL
SELECT3,'張三','數學'
UNIONALL
SELECT4,'李四','語文'
UNIONALL
SELECT5,'李四','英語'
UNIONALL
SELECT6,'李四','數學'

SELECTROW_NUMBER()OVER(ORDERBYnamedesc)id,name,class
FROM
(
selectDISTINCTt1.NAME,
stuff((select','+class
fromat2
wheret2.name=t1.name
forxmlpath('')),1,1,'')ASclass
fromat1
)t3

結果:

1 張三 語文,英語,數學

2 李四 語文,英語,數學


以上sqlserver2005及以上版本可用