新聞中心
在現(xiàn)代化的商業(yè)世界中,企業(yè)需要處理大量的數(shù)據(jù),以使其更好地運營并支持業(yè)務(wù)決策。數(shù)據(jù)管理在這個過程中是至關(guān)重要的,因為它要求企業(yè)有能力快速且有效地處理大量數(shù)據(jù)。BCP(批量數(shù)據(jù)庫復(fù)制程序)是一個流行的工具,它可以幫助企業(yè)管理大規(guī)模數(shù)據(jù)操作,讓數(shù)據(jù)庫管理員輕松應(yīng)對不斷增長的數(shù)據(jù)需求。

成都創(chuàng)新互聯(lián)公司2013年至今,是專業(yè)互聯(lián)網(wǎng)技術(shù)服務(wù)公司,擁有項目成都做網(wǎng)站、成都網(wǎng)站建設(shè)、成都外貿(mào)網(wǎng)站建設(shè)網(wǎng)站策劃,項目實施與項目整合能力。我們以讓每一個夢想脫穎而出為使命,1280元臨城做網(wǎng)站,已為上家服務(wù),為臨城各地企業(yè)和個人服務(wù),聯(lián)系電話:18980820575
BCP是Microsoft SQL Server的一部分,它是一個命令行實用工具,可用于導(dǎo)入和導(dǎo)出大量數(shù)據(jù)。BCP提供了許多優(yōu)點,比如高效處理大量數(shù)據(jù)、靈活的數(shù)據(jù)格式支持等等。此外,BCP還提供了很多方法來簡化數(shù)據(jù)庫管理,如導(dǎo)入和導(dǎo)出數(shù)據(jù)、備份和還原數(shù)據(jù)庫、復(fù)制和傳輸數(shù)據(jù)等等。
BCP的使用通常需要執(zhí)行多個步驟。管理員必須創(chuàng)建一個BCP格式文件,用于指定導(dǎo)入或?qū)С龅臄?shù)據(jù)的數(shù)據(jù)格式。接下來,管理員可以使用命令行執(zhí)行BCP任務(wù)。在任務(wù)執(zhí)行期間,BCP將讀取或?qū)懭霐?shù)據(jù),同時還會提供各種控制選項,如行分隔符、列分隔符等等。
BCP的主要優(yōu)點是能夠快速地處理大量數(shù)據(jù)。由于BCP是基于命令行的,因此它可以在沒有GUI界面的情況下快速執(zhí)行。此外,由于它可以處理多個文件和表,它可以應(yīng)對各種數(shù)據(jù)格式和數(shù)量的數(shù)據(jù)。另外,BCP還提供了數(shù)據(jù)安全性控制,能夠根據(jù)需要進(jìn)行加密和解密。
在實際應(yīng)用中,可以使用BCP來管理大規(guī)模的數(shù)據(jù)庫操作。通過使用BCP,管理員可以將大量數(shù)據(jù)導(dǎo)入到數(shù)據(jù)庫中,也可以使用它來導(dǎo)出數(shù)據(jù)以便其他系統(tǒng)使用。例如,企業(yè)可以使用BCP將數(shù)據(jù)導(dǎo)入到一個倉庫中,然后在倉庫中對數(shù)據(jù)進(jìn)行處理,以幫助決策者更好地了解數(shù)據(jù)和進(jìn)行業(yè)務(wù)決策。
在使用BCP時,管理員需要注意一些要點。BCP需要一定的命令行基礎(chǔ)知識,因此管理員需要花費時間來學(xué)習(xí)基本的命令行用法。由于BCP是基于文件和表的,因此管理員需要正確地配置BCP格式文件,以確保導(dǎo)入和導(dǎo)出的數(shù)據(jù)格式正確。管理員還需要考慮數(shù)據(jù)的安全性和敏感性,需要為數(shù)據(jù)的保護和安全性制定適當(dāng)?shù)拇胧?/p>
總而言之,BCP是一個非常有用的工具,可以幫助企業(yè)有效地管理大規(guī)模的數(shù)據(jù)庫操作,以支持業(yè)務(wù)決策和管理業(yè)務(wù)信息。當(dāng)管理員正確地配置和使用BCP時,就可以通過它提高數(shù)據(jù)的質(zhì)量、效率和可靠性,從而得到更好的業(yè)務(wù)結(jié)果。
相關(guān)問題拓展閱讀:
- 在cmd中使用bcp 工具導(dǎo)出數(shù)據(jù)的問題
在cmd中使用bcp 工具導(dǎo)出數(shù)據(jù)的問題
BCP是SQL Server中負(fù)責(zé)導(dǎo)入導(dǎo)出數(shù)據(jù)的一個命令行工具,它是基于DB-Library的,并且能以并行的方式高效地導(dǎo)入導(dǎo)出大批量的數(shù)據(jù)。BCP可以將數(shù)據(jù)庫的表或視圖直接導(dǎo)出,也能通過SELECT FROM語句對表或視圖進(jìn)行過濾后導(dǎo)出。在導(dǎo)入導(dǎo)出數(shù)據(jù)時,可以使用默認(rèn)值或是使用一個格式文件將文件中的數(shù)據(jù)導(dǎo)入到數(shù)據(jù)庫或?qū)?shù)據(jù)庫中的數(shù)據(jù)導(dǎo)出到文件中。
下面將詳細(xì)討論如何利用BCP導(dǎo)入導(dǎo)出數(shù)據(jù)。
1. BCP的主要參數(shù)介紹
BCP共有四個動作可以選擇。
(1) 導(dǎo)入。
這個動作使用in命令完成,后面跟需要導(dǎo)入的文件名。
(2) 導(dǎo)出。
這個動作使用out命令完成,后面跟需要導(dǎo)出的文件名。
(3) 使用SQL語句導(dǎo)出。
這個動作使用queryout命令完租敗成,它跟out類似,只是數(shù)據(jù)源不是表或視圖名,而是SQL語句。
(4) 導(dǎo)出格式文件。
這個動作使用format命令完成,后而跟格式文件名。
下面介猛鎮(zhèn)紹一些常用的選項:
-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類似,只是當(dāng)使用Unicode字符集拷貝數(shù)據(jù)時使用,且以nchar做為存儲類型。
-t field_term
指定字符分割符,默認(rèn)是”t”。
-r row_term
指定行分割符,默認(rèn)是”n”。
-S server_name
指定要連接的SQL Server服務(wù)器的實例,如果未指定此選項,BCP連接本機的SQL Server默認(rèn)實例。如果要連接某臺機器上的默認(rèn)實例,只需要指定機器名即可。
-U login_id
指定連接SQL Sever的用戶名。
-P password
指定連接SQL Server的用戶名密碼。
-T
指定BCP使用信任連接登錄SQL Server。如果未指定-T,必須指定-U和-P。
-k
指定空弊知顫列使用null值插入,而不是這列的默認(rèn)值。
2. 如何使用BCP導(dǎo)出數(shù)據(jù)
(1) 使用BCP導(dǎo)出整個表或視圖。
BCP AdventureWorks.sales.currency out c:currency1.txt -c -U”sa” -P”password” –使用密碼連接
或
BCP AdventureWorks.sales.currency out c:currency1.txt -c -T –使用信任連接
下面是上述命令執(zhí)行后的輸出結(jié)果
Starting copy…
105 rows copied.
Network packet size (bytes): 4096
Clock Time (ms.) Total : 10 Average : (10500.00 rows per sec.)
下面是currency1.txt的部分內(nèi)容
AED Emirati Dirham:00:00.000
AFA Afghani:00:00.000
… … …
… … …
ZWD Zimbabwe Dollar:00:00.000
在使用密碼登錄時需要將-U后的用戶名和-P后的密碼加上雙引號。
注:BCP除了可以在控制臺執(zhí)行外,還可以通過調(diào)用SQL Server的一個系統(tǒng)存儲過程xp_cmdshell以SQL語句的方式運行BCP。如上述之一條命令可改寫為
EXEC master..xp_cmdshell ‘BCP AdventureWorks.sales.currency out c:currency1.txt -c -U”sa” -P”password”‘
執(zhí)行xp_cmdshell后,返回信息以表的形式輸出。為了可以方便地在SQL中執(zhí)行BCP,下面的命令都使用xp_cmdshell執(zhí)行BCP命令。
(2) 對要導(dǎo)出的表進(jìn)行過濾。
BCP不僅可以接受表名或視圖名做為參數(shù),也可以接受SQL做為參數(shù)。通過SQL語句可以對要導(dǎo)出的表進(jìn)行過濾,然后導(dǎo)出過濾后的記錄。
EXEC master..xp_cmdshell ‘BCP “SELECT TOP 20 * FROM AdventureWorks.sales.currency” queryout c:currency2.txt -c -U”sa” -P”password”‘(xp表示本存儲過程是擴展的存儲過程,extend procedure,cmdshell是command shell的意思,也就是直接敲命令執(zhí)行。)
BCP還可以通過簡單地設(shè)置選項對導(dǎo)出的行進(jìn)行限制。
EXEC master..xp_cmdshell ‘BCP “SELECT TOP 20 * FROM AdventureWorks.sales.currency” queryout c:currency2.txt -F 10 -L 13 -c -U”sa” -P”password”‘
這條命令使用了兩個參數(shù)-F 10和-L 13,表示從SELECT TOP 20 * FROM AdventureWorks.sales.currency所查出來的結(jié)果中取第10條到13條記錄進(jìn)行導(dǎo)出。
3. 如何使用BCP導(dǎo)出格式文件
BCP不僅可以根據(jù)表、視圖導(dǎo)入導(dǎo)出數(shù)據(jù),還可以配合格式文件對導(dǎo)入導(dǎo)出數(shù)據(jù)進(jìn)行限制。格式文件以純文本文件形式存在,分為一般格式和xml格式。用戶可以手工編寫格式文件,也可以通過BCP命令根據(jù)表、視圖自動生成格式文件。
EXEC master..xp_cmdshell ‘BCP AdventureWorks.sales.currency format nul -f c:currency_format1.fmt -c -T’
上述命令將currency表的結(jié)構(gòu)生成了一個格式文件currency_format1.fmt,下面是這個格式文件的內(nèi)容。
9.0
1 SQLCHAR 0 6 “t” 1 CurrencyCode SQL_Latin1_General_CP1_CI_AS
2 SQLCHAR”t” 2 Name SQL_Latin1_General_CP1_CI_AS
3 SQLCHAR 0 24 “rn” 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格式文件所描述的內(nèi)容和普通格式文件所描述的內(nèi)容完全一樣,只是格式不同。
4. 如何使用BCP導(dǎo)入數(shù)據(jù)
BCP可以通過in命令將上面所導(dǎo)出的currency1.txt和currency2.txt再重新導(dǎo)入到數(shù)據(jù)庫中,由于currency有主鍵,因此我們將復(fù)制一個和currency的結(jié)構(gòu)完全一樣的表。
SELECT TOP 0 * INTO AdventureWorks.sales.currency1 FROM AdventureWorks.sales.currency
將數(shù)據(jù)導(dǎo)入到currency1表中
EXEC master..xp_cmdshell ‘BCP AdventureWorks.sales.currency1 in c:currency1.txt -c -T’
導(dǎo)入數(shù)據(jù)也同樣可以使用-F和-L選項來選擇導(dǎo)入數(shù)據(jù)的記錄行。
EXEC master..xp_cmdshell ‘BCP AdventureWorks.sales.currency1 in c:currency1.txt -c -F 10 -L 13 -T’
在導(dǎo)入數(shù)據(jù)時可以根據(jù)已經(jīng)存在的格式文件將滿足條件的記錄導(dǎo)入到數(shù)據(jù)庫中,不滿足則不導(dǎo)入。如上述的格式文件中的第三個字段的字符長度是24,如果某個文本文件中的相應(yīng)字段的長度超過24,則這條記錄將不被導(dǎo)入到數(shù)據(jù)庫中,其它滿足條件的記錄正常導(dǎo)入。
使用普通的格式文件
EXEC master..xp_cmdshell ‘BCP AdventureWorks.sales.currency1 in c:currency1.txt -F 10 -L 13 -c -f c:currency_format1.fmt -T’
使用xml格式的格式文件
EXEC master..xp_cmdshell ‘BCP AdventureWorks.sales.currency1 in c:currency1.txt -F 10 -L 13 -c -x -f c:currency_format2.fmt -T’
總結(jié)
BCP命令是SQL Server提供的一個快捷的數(shù)據(jù)導(dǎo)入導(dǎo)出工具。使用它不需要啟動任何圖形管理工具就能以高效的方式導(dǎo)入導(dǎo)出數(shù)據(jù)。當(dāng)然,它也可以通過xp_cmdshell在SQL語句中執(zhí)行,通過這種方式可以將其放到客戶端程序中(如delphi、c#等)運行,這也是使客戶端程序具有數(shù)據(jù)導(dǎo)入導(dǎo)出功能的方法之一。
xp_cmdshell
以操作系統(tǒng)命令行解釋器的方式執(zhí)行給定的命令字符串,并以文本行方式返回任何輸出。授予非管理用戶執(zhí)行 xp_cmdshell 的權(quán)限。
說明 在 Microsoft? Windows?或 Microsoft Windows操作系統(tǒng)中執(zhí)行 xp_cmdshell 時,將不把 xp_cmdshell 的返回代碼設(shè)置為喚醒調(diào)用的可執(zhí)行文件的進(jìn)程退出代碼。返回代碼始終為 0。
語法
xp_cmdshell {‘command_string’}
參數(shù)
‘command_string’
是在操作系統(tǒng)命令行解釋器上執(zhí)行的命令字符串。command_string 的數(shù)據(jù)類型為 varchar(255) 或 nvarchar(4000),沒有默認(rèn)值。command_string 不能包含一對以上的雙引號。如果由 command_string 引用的文件路徑或程序名稱中有空格,則需要使用一對引號。如果使用嵌入空格不方便,可考慮使用 FAT 8.3 文件名作為解決辦法。
no_output
是可選參數(shù),表示執(zhí)行給定的 command_string,但不向客戶端返回任何輸出。
返回代碼值
0(成功)或 1(失?。?
結(jié)果集
執(zhí)行下列 xp_cmdshell 語句將返回當(dāng)前目錄的目錄列表。
xp_cmdshell ‘dir *.exe’
行以 nvarchar(255) 列的形式返回。
執(zhí)行下列 xp_cmdshell 語句將返回隨后的結(jié)果集:
xp_cmdshell ‘dir *.exe’, NO_OUTPUT
下面是結(jié)果:
The command(s) completed successfully.
注釋
xp_cmdshell 以同步方式操作。在命令行解釋器命令執(zhí)行完畢之前,不會返回控制。
當(dāng)授予用戶執(zhí)行權(quán)限時,用戶能在 Microsoft Windows NT? 命令行解釋器上執(zhí)行運行 Microsoft SQL Server? 的帳戶有權(quán)執(zhí)行的任何操作系統(tǒng)命令。
默認(rèn)情況下,只有 sysadmin 固定服務(wù)器角色的成員才能執(zhí)行此擴展存儲過程。但是,也可以授予其他用戶執(zhí)行此存儲過程的權(quán)限。
當(dāng)作為 sysadmin 固定服務(wù)器角色成員的用戶喚醒調(diào)用 xp_cmdshell 時,將在運行 SQL Server 服務(wù)的安全上下文中執(zhí)行 xp_cmdshell。當(dāng)用戶不是 sysadmin 組的成員時,xp_cmdshell 將模擬使用 xp_sqlagent_proxy_account 指定的 SQL Server 代理程序的代理帳戶。如果代理帳戶不能用,則 xp_cmdshell 將失敗。這只是針對于 Microsoft? Windows NT? 4.0 和 Windows。在 Windows 9.x 上,沒有模擬,且 xp_cmdshell 始終在啟動 SQL Server 的 Windows 9.x 用戶的安全上下文下執(zhí)行。
說明 在早期版本中,獲得 xp_cmdshell 執(zhí)行權(quán)限的用戶在 MSSQLServer 服務(wù)的用戶帳戶上下文中運行命令??梢酝ㄟ^配置選項配置 SQL Server,以便對 SQL Server 無 sa 訪問權(quán)限的用戶能夠在 SQLExecutiveCmdExec Windows NT 帳戶的上下文中運行 xp_cmdshell。在 SQL Server 7.0 中,該帳戶稱為 SQLAgentCmdExec?,F(xiàn)在,不是 sysadmin 固定服務(wù)器角色成員的用戶將在該帳戶上下文中運行命令,而無需再進(jìn)行配置更改。
權(quán)限
xp_deletemail 的執(zhí)行權(quán)限默認(rèn)授予 sysadmin 固定服務(wù)器角色的成員,但可以授予其他用戶。
重要 如果為 MSSQLServer 服務(wù)選用的 Windows NT 帳戶不是本地管理員組的成員,則非 sysadmin 固定服務(wù)器角色成員的用戶將無法執(zhí)行 xp_cmdshell。
示例
A. 返回可執(zhí)行文件列表
下例顯示執(zhí)行目錄命令的 xp_cmdshell 擴展存儲過程。
EXEC master..xp_cmdshell ‘dir *.exe’
B. 使用 Windows NT net 命令
下例顯示 xp_cmdshell 在存儲過程中的使用。下例先用 net send 通知用戶 SQL Server 即將關(guān)閉,然后用 net pause 暫停服務(wù)器,最后用 net stop 關(guān)閉服務(wù)器。
CREATE PROC shutdown10
AS
EXEC xp_cmdshell ‘net send /domain:SQL_USERS ”SQL Server shutting down
inminutes. No more connections allowed.’, no_output
EXEC xp_cmdshell ‘net pause sqlserver’
WAITFOR DELAY ’00:05:00′
EXEC xp_cmdshell ‘net send /domain: SQL_USERS ”SQL Server shutting down
inminutes.’, no_output
WAITFOR DELAY ’00:04:00′
EXEC xp_cmdshell ‘net send /domain:SQL_USERS ”SQL Server shutting down
inminute. Log off now.’, no_output
WAITFOR DELAY ’00:01:00′
EXEC xp_cmdshell ‘net stop sqlserver’, no_output
C. 不返回輸出
下例使用 xp_cmdshell 執(zhí)行命令字符串,且不向客戶端返回輸出。
USE master
EXEC xp_cmdshell ‘copy c:\sqldumps\pubs.dmp \\server2\backups\sqldumps’,
NO_OUTPUT
D. 使用返回狀態(tài)
在下例中,xp_cmdshell 擴展存儲過程也給出了返回狀態(tài)。返回代碼值存儲在變量 @result 中。
DECLARE @result int
EXEC @result = xp_cmdshell ‘dir *.exe’
IF (@result = 0)
PRINT ‘Success’
ELSE
PRINT ‘Failure’
E. 將變量內(nèi)容寫入文件
下例將當(dāng)前目錄內(nèi)容寫入當(dāng)前服務(wù)器目錄下名為 dir_out.txt 的文件中。
DECLARE @cmd sysname, @var sysname
SET @var = ‘dir /p’
SET @cmd = ‘echo ‘ + @var + ‘ > dir_out.txt’
EXEC master..xp_cmdshell @cmd
例如:
1、寫成存儲過程,建立作業(yè)定時備份~~~
–在sql中映射一下就可以了
exec master..xp_cmdshell ‘net use z: \\yizhi\D$ “密碼” /user:yizhi\administrator’
–備份;with init覆蓋|noinit添加
backup database 庫名 to disk=’E:\H_BACKUP.bak’ with init
–COPY
exec master..xp_cmdshell ‘copy E:\H_BACKUP.bak z:’
–刪除(這句可以去掉)
–exec master..xp_cmdshell ‘del E:\H_BACKUP.bak’
–完成后刪除映射
exec master..xp_cmdshell ‘net use z: /delete’
2、操作DOC下的查詢SQL語句,也就是osql的用法
用法: osql
禁用命令,>
批處理
自動調(diào)整控制臺寬度
寬消息
默認(rèn)錯誤級別為和 1
exec master..xp_cmdshell ‘osql -U sa -P-S (Local) -i E:\Study\SQL\Data\SqlText\cmdshellTest.sql’
關(guān)于bcp數(shù)據(jù)庫批量處理的介紹到此就結(jié)束了,不知道你從中找到你需要的信息了嗎 ?如果你還想了解更多這方面的信息,記得收藏關(guān)注本站。
香港服務(wù)器選創(chuàng)新互聯(lián),2H2G首月10元開通。
創(chuàng)新互聯(lián)(www.cdcxhl.com)互聯(lián)網(wǎng)服務(wù)提供商,擁有超過10年的服務(wù)器租用、服務(wù)器托管、云服務(wù)器、虛擬主機、網(wǎng)站系統(tǒng)開發(fā)經(jīng)驗。專業(yè)提供云主機、虛擬主機、域名注冊、VPS主機、云服務(wù)器、香港云服務(wù)器、免備案服務(wù)器等。
分享題目:BCP數(shù)據(jù)庫批量處理:高效管理數(shù)據(jù)大規(guī)模操作(bcp數(shù)據(jù)庫批量處理)
本文URL:http://www.dlmjj.cn/article/cdphjis.html


咨詢
建站咨詢
