日韩久久久精品,亚洲精品久久久久久久久久久,亚洲欧美一区二区三区国产精品 ,一区二区福利

SQL server 數(shù)據(jù)導(dǎo)入導(dǎo)出BCP工具使用詳解

系統(tǒng) 2115 0

??? 數(shù)據(jù)的導(dǎo)入導(dǎo)出是數(shù)據(jù)庫管理員常見的工作任務(wù)之一,尤其是平面文件的導(dǎo)入導(dǎo)出。BCP 工具則為這些任務(wù)提供了強有力的支持,它是基于DB-Library,尤其是在生產(chǎn)環(huán)境中,從本地傳送數(shù)據(jù)到服務(wù)器或從服務(wù)器傳送數(shù)據(jù)到本地,因它無需提供圖形界面,減少網(wǎng)絡(luò)帶寬,提高了傳輸速率。BCP的全稱是BULK COPY PROGRAM,它是一個命令行程序,可以完全脫離SQL server進程來實現(xiàn)。


??? 常用的導(dǎo)入方式:bcp, BULK INSERT,OPENROWSET,or SSIS。

?

??? 本文主要介紹bcp工具的使用,其他的如BULK INSERT,OPENROWSET,or SSIS請參見后續(xù)博文。


??? bcp的使用:可以在SQL Server 2005 實例和用戶指定格式的數(shù)據(jù)文件間實現(xiàn)大容量復(fù)制數(shù)據(jù),可以將平面文件導(dǎo)入到SQL server表,也可以將SQL server表導(dǎo)出為文件。該命令為一個DOS命令,通常位于x:/Program Files/Microsoft SQL Server/90/Tools/Bin目錄下,可以在命令提示符下使用。

?

??? 以下簡要列出其語法:
??? 語法:bcp {[[database_name.][owner].]{table_name | view_name} | "query"}???? --指定相應(yīng)的數(shù)據(jù)庫名,表名,視圖名或SQL查詢語句,查詢語句使用雙引號括起來。


? ?? {in | out | queryout | format} data_file???????? --數(shù)據(jù)流動的方向,in導(dǎo)入,out導(dǎo)出,queryout結(jié)果集 及指定data_file文件。
? ?? [-mmax_errors] [-fformat_file] [-x] [-eerr_file]???????????????????????? --bcp的錯誤處理選項
? ??? [-Ffirst_row] [-Llast_row] [-bbatch_size]??????????????????????????????? --可以指定特定行數(shù)
? ??? [-n] [-c] [-N] [-w] [-V (60 | 65 | 70 | 80)] [-6]??????????????????????? --有關(guān)字符編碼選項,通常很少使用
? ??? [-q] [-C { ACP | OEM | RAW | code_page } ] [-tfield_term]?
? ??? [-rrow_term] [-iinput_file] [-ooutput_file] [-apacket_size]
? ??? [-Sserver_name[/instance_name]] [-Ulogin_id] [-Ppassword]?????????????? --指定登陸的服務(wù)器名、實例名及登陸賬戶密碼。
? ??? [-T] [-v] [-R] [-k] [-E] [-h"hint [,...n]"]???????????????????????????? --hint提示使用TABLOCK或CHECK_CONSTRAINTS,F(xiàn)IRE_TRIGGERS 等通常用于支持最小日志記錄

??? 幾個常用的參數(shù):-f format_file

??? format_file表示格式文件名。這個選項依賴于上述的動作,如果使用的是in或out,format_file表示已經(jīng)存在的格式文件,如果使用的是format則表示是要生成的格式文件。

??? -x??????????????????? ?這個選項要和-f format_file配合使用,以便生成xml格式的格式文件。

??? -F first_row????? 指定從被導(dǎo)出表的哪一行導(dǎo)出,或從被導(dǎo)入文件的哪一行導(dǎo)入。

??? -L last_row??????指定被導(dǎo)出表要導(dǎo)到哪一行結(jié)束,或從被導(dǎo)入文件導(dǎo)數(shù)據(jù)時,導(dǎo)到哪一行結(jié)束。

??? -c???????????????????? 使用char類型做為存儲類型,沒有前綴且以"/t"做為字段分割符,以"/n"做為行分割符。

??? -w????????????????? ?和-c類似,只是當使用Unicode字符集拷貝數(shù)據(jù)時使用,且以nchar做為存儲類型。

??? -t field_term??? 指定字符分割符,默認是"/t"。

??? -r row_term???? 指定行分割符,默認是"/n"。

?? -S server_name[ /instance_name]??? 指定要連接的SQL Server服務(wù)器的實例,如果未指定此選項,bcp連接本機的SQL Server默認實例。如果要連接某臺機器上的默認實例,只需要指定機器名即可。

??? -U login_id?????? 指定連接SQL Sever的用戶名。

??? -P password??? 指定連接SQL Server的用戶名密碼。

??? -T??????????????????? ?指定bcp使用信任連接登錄SQL Server。如果未指定-T,必須指定-U和-P。

??? -k?????????????????? ? 指定空列使用null值插入,而不是這列的默認值。

??? 權(quán)限:
??? bcp out 操作要求對源表有 SELECT 權(quán)限。
??? bcp in 操作要求至少對目標表有 SELECT/INSERT 權(quán)限。
??? 當被導(dǎo)入的表中存在CHECK約束和TRIGGER時,缺省的行為為關(guān)閉,不要指定-h 選項和 CHECK_CONSTRAINTS? 以及FIRE_TRIGGERS 提示。故需要對表有Alter table 權(quán)限。


??? 一、bcp導(dǎo)出到平面文件
??? 1.將表復(fù)制到平面文件(使用信任連接,使用參數(shù) -T),在命令提示符下輸入以下語句

bcp AdventureWorks.Sales.SalesOrderHeader OUT d:/SalesOrders.txt -c -T???? -- -T表示使用可信任的連接

Starting copy...
1000 rows successfully bulk-copied to host-file. Total received: 1000
1000 rows successfully bulk-copied to host-file. Total received: 2000
--.........省略
--.........省略
31465 rows copied.
Network packet size (bytes): 4096
Clock Time (ms.) Total???? : 454??? Average : (69306.17 rows per sec.)

?

使用xp_cmdshell存儲過程來執(zhí)行bcp,鑒于演示的方便,后續(xù)的處理將全部采用xp_cmdshell來實現(xiàn)。
EXEC xp_cmdshell 'bcp AdventureWorks.Sales.SalesOrderHeader OUT d:/SalesOrders1.txt -c -T'

?

2.將表復(fù)制到平面文件(使用混合身份驗證,使用參數(shù) -U —P,例如:-U"Test" -P"Test" , -U后的用戶名和-P后的密碼加上雙引號)
EXEC xp_cmdshell 'bcp AdventureWorks.Sales.SalesOrderHeader OUT d:/SalesOrders2.txt -c -U"Test" -P"Test"'

?

3.將指定的列或行復(fù)制到平面文件
EXEC xp_cmdshell??? --導(dǎo)出指定的列 使用到了queryout
'bcp "SELECT SalesOrderID,OrderDate,SalesOrderNumber FROM AdventureWorks.Sales.SalesOrderHeader"? queryout d:/SalesOrders3.txt -c -U"Test" -P"Test" '

?

EXEC xp_cmdshell??? --導(dǎo)出指定的行,查詢結(jié)果中的第20到第40條記錄, 使用到了queryout
'bcp "SELECT TOP(50) SalesOrderID,OrderDate,SalesOrderNumber FROM AdventureWorks.Sales.SalesOrderHeader WHERE OrderDate >= ''20040101''"? queryout d:/SalesOrders4.txt -c -F 20 -L 40 -T '

?

二、bcp導(dǎo)出格式文件
??? 格式文件分為一般格式文件和XML格式文件,以下示例將SalesOrderHeader表的格式形成一個一般格式文件,也稱為非XML 格式化文件。
EXEC xp_cmdshell 'bcp AdventureWorks.sales.SalesOrderHeader format nul -f d:/SalesOrders_format.fmt -c -T? '??
----------------
9.0????????????????
27?????????? --字段總數(shù),多出的字段被省略,以下分別給出了字段的序號,類型,長度,分隔符,字段名等信息。
1?????? SQLCHAR?????? 0?????? 12????? "/t"???? 1???? SalesOrderID???????????????????????????????????? ""
2?????? SQLCHAR?????? 0?????? 5?????? "/t"???? 2???? RevisionNumber?????????????????????????????????? ""
3?????? SQLCHAR?????? 0?????? 24????? "/t"???? 3???? OrderDate??????????????????????????????????????? ""
4?????? SQLCHAR?????? 0?????? 24????? "/t"???? 4???? DueDate?????

???????????????????????????????????? ""
XML 格式化文件
EXEC xp_cmdshell 'bcp AdventureWorks.sales.SalesOrderHeader format nul? -x -f d:/SaOrders_format_x.xml -c -T? '?
非XML格式化文件與XML格式化文件兩者用不同的方式來描述原始表的結(jié)構(gòu),其實質(zhì)是一樣的。

?

bcp導(dǎo)入平面文件到數(shù)據(jù)庫表
創(chuàng)建新表NewOrderHeader,然后將前面導(dǎo)出的數(shù)據(jù)導(dǎo)入到新表


SELECT * INTO NewOrderHeader FROM sales.SalesOrderHeader WHERE 1=2
EXEC [master]..xp_cmdshell 'bcp AdventureWorks..NewOrderHeader in d:/SalesOrders.txt -c -T'
SELECT * FROM NewOrderHeader

?

使用格式化文件實現(xiàn)bcp的大容量導(dǎo)入

TRUNCATE TABLE NewOrderHeader
EXEC [master]..xp_cmdshell 'bcp AdventureWorks..NewOrderHeader in d:/SalesOrders.txt -f d:/Currency.xml -F 2000 -L 4000 -c -T'
SELECT * FROM NewOrderHeader

SQL server 數(shù)據(jù)導(dǎo)入導(dǎo)出BCP工具使用詳解


更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯(lián)系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發(fā)表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 晴隆县| 洪雅县| 且末县| 平度市| 安多县| 临城县| 伊春市| 曲水县| 永善县| 澄城县| 称多县| 楚雄市| 临桂县| 登封市| 阿拉善左旗| 资兴市| 云霄县| 富川| 焦作市| 巴楚县| 微山县| 北京市| 陆川县| 大荔县| 墨脱县| 青河县| 英山县| 资中县| 汶川县| 临桂县| 郧西县| 潢川县| 丰城市| 莱西市| 山丹县| 许昌县| 北安市| 冕宁县| 惠来县| 喀喇沁旗| 营山县|