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

sql導出excelbcp

發布時間: 2022-02-02 14:47:17

❶ mssql中如何用bcp工具導出一個表格到一個excel文件中

bcp不僅可以根據表、視圖導入導出數據,還可以配合格式文件對導入導出數據進行限制。格式文件以純文本文件形式存在,分為一般格式和xml格式。用戶可以手工編寫格式文件,也可以通過bcp命令根據表、視圖自動生成格式文件。
EXEC master..xp_cmdshell 'bcp AdventureWorks.sales.currency format nul -f c:\currency_format1.fmt -c -T'
上述命令將currency表的結構生成了一個格式文件currency_format1.fmt,下面是這個格式文件的內容。
9.0
3
1 SQLCHAR 0 6 "\t" 1 CurrencyCode SQL_Latin1_General_CP1_CI_AS
2 SQLCHAR 0 100 "\t" 2 Name SQL_Latin1_General_CP1_CI_AS
3 SQLCHAR 0 24 "\r\n" 3 ModifiedDate
這個格式文件記錄了這個表的欄位(共3個欄位)類型、長度、字元和行分割符和欄位名等信息。
bcp還可以通過-x選項生成xml格式的格式文件。
EXEC master..xp_cmdshell 'bcp AdventureWorks.sales.currency format nul -f c:\currency_format2.fmt -x -c -T'
xml格式文件所描述的內容和普通格式文件所描述的內容完全一樣,只是格式不同。

❷ 如何使用SQL Server命令BCP 導入導出EXCEL數據

SQL Server BCP 導入導出使用 Bcp 導出導入數據高效,比使用SQL Server Management Stdio 提供的資料庫導出導入要高效因為sql server 也沒有提供提供類似oracle的expdp和impdp的工具,如果用SQL Server Management Stdio提供的導入導出對大表數據進行遷移速度太慢了
Bcp 導出數據高效比較適用於大表數據的遷移
進入doc命令行輸入bcp命令,就彈出bcp命令的幫助信息:
C:\Users\wangwei>bcp
用法: bcp {dbtable | query} {in | out | queryout | format} 數據文件
[-m 最大錯誤數] [-f 格式化文件] [-e 錯誤文件]
[-F 首行] [-L 末行] [-b 批大小]
[-n 本機類型] [-c 字元類型] [-w 寬字元類型]
[-N 將非文本保持為本機類型] [-V 文件格式版本] [-q 帶引號的標識符]
[-C 代碼頁說明符] [-t 欄位終止符] [-r 行終止符]
[-i 輸入文件] [-o 輸出文件] [-a 數據包大小]
[-S 伺服器名稱] [-U 用戶名] [-P 密碼]
[-T 可信連接] [-v 版本] [-R 允許使用區域設置]
[-k 保留 Null 值] [-E 保留標識值]
[-h"載入提示"] [-x 生成 xml 格式化文件]
參數介紹:
bcp共有四個動作可以選擇。
(1) 導入。
這個動作使用in命令完成,後面跟需要導入的文件名。
(2) 導出。
這個動作使用out命令完成,後面跟需要導出的文件名。
(3) 使用SQL語句導出。
這個動作使用queryout命令完成,它跟out類似,只是數據源不是表或視圖名,而是SQL語句。
(4) 導出格式文件。
這個動作使用format命令完成,後而跟格式文件名。
下面介紹一些常用的選項:
-f format_file
format_file表示格式文件名。這個選項依賴於上述的動作,如果使用的是in或out,format_file表示已經存在的格式文件,如果使用的是format則表示是要生成的格式文件。
-x
這個選項要和-f format_file配合使用,以便生成xml格式的格式文件。
-F first_row
指定從被導出表的哪一行導出,或從被導入文件的哪一行導入。
-L last_row
指定被導出表要導到哪一行結束,或從被導入文件導數據時,導到哪一行結束。
-c
使用char類型做為存儲類型,沒有前綴且以"\t"做為欄位分割符,以"\n"做為行分割符。
-w
和-c類似,只是當使用Unicode字元集拷貝數據時使用,且以nchar做為存儲類型。
-t field_term
指定字元分割符,默認是"\t"。
-r row_term
指定行分割符,默認是"\n"。
-S server_name[ \instance_name]
指定要連接的SQL Server伺服器的實例,如果未指定此選項,bcp連接本機的SQL Server默認實例。如果要連接某台機器上的默認實例,只需要指定機器名即可。
-U login_id
指定連接SQL Sever的用戶名。
-P password
指定連接SQL Server的用戶名密碼。
-T
指定bcp使用信任連接登錄SQL Server。如果未指定-T,必須指定-U和-P。
-k
指定空列使用null值插入,而不是這列的默認值。

使用bcp導出數據
在控制台執行bcp:
bcp db_name.dbo.T_tablename out c:\a.txt -c -T
bcp db_name.dbo.T_tablename out c:\a.txt -c -Uusername -Pxxxxx
通過調用SQL Server的一個系統存儲過程xp_cmdshell以SQL語句的方式運行bcp:
exec master..xp_cmdshell 'bcp db_name.dbo.T_tablename out c:\a.txt -c -T' --"-T"信任連接
exec master..xp_cmdshell 'bcp db_name.dbo.T_tablename out c:\a.txt -c -Usa -Pxxxxx'
說明:
-T指定 bcp 使用網路用戶的安全憑據,通過信任連接連接到 SQL Server。不需要 login_id 和 password。
如果不是使用T需要加上-U和-P參數輸入用戶名和密碼
如果是本地導入導出可以不加-S參數,如果連接到遠程服務需要加-S參數
bcp db_name.dbo.tablename out d:\table.txt -c -q -S"120.26.76.220,1833" -U"sa" -P"password"

對要導出的表進行過濾。
bcp不僅可以接受表名或視圖名做為參數,也可以接受SQL做為參數,通過SQL語句可以對要導出的表進行過濾,然後導出過濾後的記錄。
EXEC master..xp_cmdshell 'bcp "SELECT TOP 20 * FROM db_name.dbo.T_tablename" queryout c:\table2.txt -c -U"sa" -P"password"'
bcp還可以通過簡單地設置選項對導出的行進行限制。
這條命令使用了兩個參數-F 2和-L 16,表示從SE
EXEC master..xp_cmdshell 'bcp "SELECT TOP 20 * FROM db_name.dbo.T_tablename" queryout c:\currency2.txt -F 2 -L 16 -c -U"sa" -P"password"'
SELECT TOP 20 * FROM db_name.dbo.T_tablename所查出來的結果中取第2條到16條記錄進行導出。
使用bcp導入數據
bcp可以通過in命令將bcp導出的文件導入到表中,首先需要創建表結構和導出數據的表結構相同
在控制台執行bcp:
bcp db_name.dbo.T_tablename in c:\a.txt-c -T
bcp db_name.dbo.T_tablename in c:\a.txt -c -Uusername -Pxxxxx
通過調用SQL Server的一個系統存儲過程xp_cmdshell以SQL語句的方式運行bcp:
exec master..xp_cmdshell 'bcp db_name.dbo.T_tablename in c:\a.txt-c -T' --"-T"信任連接
exec master..xp_cmdshell 'bcp db_name.dbo.T_tablename in c:\a.txt -c -Usa -Pxxxxx'

❸ Sql導出到Excel(急)

--這樣?
方法I:(Excel文件已經存在,而且已經按照要接收的數據創建好表頭——追加記錄)
insert into OPENROWSET('Microsoft.Jet.OLEDB.4.0','Excel 5.0;HDR=YES;DATABASE=c:\temp.xls',temp$)
select * from 資料庫名..表名

方法II:(Excel文件不存在,也可以用BCP來導成類Excel的文件,注意大小寫)
exec master..xp_cmdshell 'bcp "select top 1 * from 資料庫名..表名
where c1=''張三''" queryout c:\Temp.xls -c -q -S"伺服器名" -U"sa" -P"密碼"'

❹ 怎麼把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 資料庫名.dbo.表名 out "c:test.xls" /c -/s"伺服器名" /u"用戶名" -p"密碼"

--導出查詢的情況
exec master..xp_cmdshell bcp "select au_fname, au_lname from pubs..authors order by au_lname" queryout "c:test.xls" /c -/s"伺服器名" /u"用戶名" -p"密碼"

/*--說明:
c:test.xls 為導入/導出的excel文檔名.
sheet1$ 為excel文檔的工作表名,一般要加上$才能正常使用.
--*/
--上面已說過,用bcp導出的是類excel文檔,其實質為文本文檔,

--要導出真正的excel文檔.就用下面的方法

/*--數據導出excel

導出表中的數據到excel,包含欄位名,文檔為真正的excel文檔
,假如文檔不存在,將自動創建文檔
,假如表不存在,將自動創建表
基於通用性考慮,僅支持導出標准數據類型
--鄒建 2003.10--*/

/*--調用示例

p_exporttb @tbname=地區資料,@path=c:,@fname=aa.xls
--*/
if exists (select * from dbo.sysobjects where id = object_id(n[dbo].[p_exporttb]) and objectproperty(id, nisprocere) = 1)
drop procere [dbo].[p_exporttb]
go

create proc p_exporttb
@tbname sysname, --要導出的表名
@path nvarchar(1000), --文檔存放目錄
@fname nvarchar(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=@tbname+.xls

--檢查文檔是否已存在
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=" +;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

/*--假如覆蓋已存在的表,就加上下面的語句
--創建之前先刪除表/假如存在的話
select @sql=drop table [+@tbname+]
exec @err=sp_oamethod @obj,execute,@out out,@sql
--*/

--創建表的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 syscolumns a left join systypes b on a.xtype=b.xusertype
where b.name not in(image,text,uniqueidentifier,sql_variant,ntext,varbinary,binary,timestamp)
and object_id(@tbname)=id
select @sql=create table [+@tbname
+](+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+,[+@tbname+$])

exec(insert into +@sql+(+@fdlist+) select +@fdlist+ from +@tbname)

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
--上面是導表的,下面是導查詢語句的.

/*--數據導出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, nisprocere) = 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=" +;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
go

❺ 怎樣將SQL數據導出到EXCEL中

SQL SERVER 和EXCEL的數據導入導出
1、在SQL SERVER里查詢Excel數據:
======================================================
SELECT *
FROM OpenDataSource( 'Microsoft.Jet.OLEDB.4.0',
'Data Source="c:\book1.xls";User ID=Admin;Password=;Extended properties=Excel 5.0')...[Sheet1$]
下面是個查詢的示例,它通過用於 Jet 的 OLE DB 提供程序查詢 Excel 電子表格。
SELECT *
FROM OpenDataSource ( 'Microsoft.Jet.OLEDB.4.0',
'Data Source="c:\Finance\account.xls";User ID=Admin;Password=;Extended properties=Excel 5.0')...xactions

2、將Excel的數據導入SQL server :
======================================================
SELECT * into newtable
FROM OpenDataSource( 'Microsoft.Jet.OLEDB.4.0',
'Data Source="c:\book1.xls";User ID=Admin;Password=;Extended properties=Excel 5.0')...[Sheet1$]
實例:
SELECT * into newtable
FROM OpenDataSource( 'Microsoft.Jet.OLEDB.4.0',
'Data Source="c:\Finance\account.xls";User ID=Admin;Password=;Extended properties=Excel 5.0')...xactions

3、將SQL SERVER中查詢到的數據導成一個Excel文件
======================================================
T-SQL代碼:
EXEC master..xp_cmdshell 'bcp 庫名.dbo.表名out c:\Temp.xls -c -q -S"servername" -U"sa" -P""'
參數:S 是SQL伺服器名;U是用戶;P是密碼
說明:還可以導出文本文件等多種格式
實例:EXEC master..xp_cmdshell 'bcp saletesttmp.dbo.CusAccount out c:\temp1.xls -c -q -S"pmserver" -U"sa" -P"sa"'
EXEC master..xp_cmdshell 'bcp "SELECT au_fname, au_lname FROM pubs..authors ORDER BY au_lname" queryout C:\ authors.xls -c -Sservername -Usa -Ppassword'
在VB6中應用ADO導出EXCEL文件代碼:
Dim cn As New ADODB.Connection
cn.open "Driver={SQL Server};Server=WEBSVR;DataBase=WebMis;UID=sa;WD=123;"
cn.execute "master..xp_cmdshell 'bcp "SELECT col1, col2 FROM 庫名.dbo.表名" queryout E:\DT.xls -c -Sservername -Usa -Ppassword'"

4、在SQL SERVER里往Excel插入數據:
======================================================
insert into OpenDataSource( 'Microsoft.Jet.OLEDB.4.0',
'Data Source="c:\Temp.xls";User ID=Admin;Password=;Extended properties=Excel 5.0')...table1 (A1,A2,A3) values (1,2,3)
T-SQL代碼:
INSERT INTO
OPENDATASOURCE('Microsoft.JET.OLEDB.4.0',
'Extended Properties=Excel 8.0;Data source=C:\training\inventur.xls')...[Filiale1$]
(bestand, prokt) VALUES (20, 'Test')

總結:利用以上語句,我們可以方便地將SQL SERVER、ACCESS和EXCEL電子表格軟體中的數據進行轉換,為我們提供了極大方便!

❻ 如果把SQL Server 2000中的表導出到Excel

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

❼ SQL導出表數據:通過寫什麼命令可以把SQL裡面查詢到的表數據導出到txt或者Excel當中

循環列名,然後用寫入(追加)到txt中。

❽ 在SQL server 2000裡面用BCP導出EXCEL表如何才能讓數字前面的0不丟失

把EXCEL中的單元格全部設置為「文本」類型

❾ sql server 導出excel

1、use test 要單獨成行,後面要跟go

2、testdb 要確定是那個資料庫的!