bcp 公用程式
bcp 公用程式會在 Microsoft SQL Server 執行個體和使用者指定格式的資料檔之間大量複製資料。您可以利用 bcp 公用程式,將大量新資料列匯入 SQL Server 資料表中,或將資料表的資料匯出至資料檔中。除了搭配 queryout 選項使用之外,這個公用程式不需要任何 Transact-SQL 方面的知識。若要將資料匯入資料表中,您必須使用專為了這份資料表而建立的格式檔,或了解資料表的結構及其資料行的有效資料類型。
如需有關用於 bcp 語法的語法慣例,請參閱<Transact-SQL 語法慣例 (Transact-SQL)>。
[!附註]
若您使用 bcp 備份資料,請建立格式檔案來記錄資料格式。bcp 資料檔案不包含任何結構描述或格式資訊,所以如果資料表或檢視表遭到卸除,而您又沒有格式檔案,可能就無法匯入資料。
語法
bcp {[[database_name.][schema].]{table_name | view_name} | "query"}
{in | out | queryout | format} data_file
[-mmax_errors] [-fformat_file] [-x] [-eerr_file]
[-Ffirst_row] [-Llast_row] [-bbatch_size]
[-ddatabase_name] [-n] [-c] [-N] [-w] [-V (70 | 80 | 90 )]
[-q] [-C { ACP | OEM | RAW | code_page } ] [-tfield_term]
[-rrow_term] [-iinput_file] [-ooutput_file] [-apacket_size]
[-S [server_name[\instance_name]]] [-Ulogin_id] [-Ppassword]
[-T] [-v] [-R] [-k] [-E] [-h"hint [,...n]"]
引數
database_name
這是指定之資料表或檢視表所在的資料庫名稱。若未指定,這就是使用者的預設資料庫。您也可以使用 -d 來明確指定資料庫名稱。
owner
這是資料表或檢視表的擁有者名稱。如果執行作業的使用者擁有指定的資料表或檢視表,則 owner是選擇性的。如果未指定 owner,且執行作業的使用者並未擁有指定的資料表或檢視表,則 SQL Server 會傳回錯誤訊息,並取消作業。table_name
這是將資料匯入 SQL Server (in) 時的目的地資料表名稱,以及從 SQL Server (out) 匯出資料時的來源資料表名稱。view_name
這是將資料複製到 SQL Server (in) 時的目的地檢視表名稱,以及從 SQL Server (out) 中複製資料時的來源檢視表名稱。只有所有資料行都參考相同資料表的檢視表才能用來做為目的地檢視表。如需有關將資料複製到檢視表之限制的詳細資訊,請參閱<INSERT (Transact-SQL)>。"query"
這是一個傳回結果集的 Transact-SQL 查詢。如果查詢傳回多個結果集,例如,指定了 COMPUTE 子句的 SELECT 陳述式,便只會將第一個結果集複製到資料檔中,且會忽略後續的結果集。請利用雙引號括住查詢,並利用單引號括住內嵌在查詢中的任何項目。當從查詢中大量複製資料時,也必須指定 queryout。只要在預存程序內參考的所有資料表在 bcp 陳述式執行之前就已存在,查詢就可以參考預存程序。例如,如果預存程序產生暫存資料表,則 bcp 陳述式會失敗,因為暫存資料表只能在執行階段執行,而不能在陳述式執行階段執行。在此種情況下,請考慮將預存程序的結果插入至資料表,然後使用 bcp 將資料表的資料複製到資料檔中。
in | out| queryout | format
請依照下列方式來指定大量複製的方向:in 會從檔案中複製到資料庫資料表或檢視表。
out 會從資料庫資料表或檢視表中複製到檔案。若您指定現有的檔案,該檔案會被覆寫。擷取資料時,請注意 bcp 公用程式會以 Null 代表空白字串,並以空白字串代表 Null 字串。
queryout 會從查詢中複製資料,且只有在從查詢中大量複製資料時,才能指定它。
format 會根據指定的選項 (-n、-c、-w 或 -N) 和資料表或檢視表分隔符號來建立格式檔案。當大量複製資料時,bcp 命令可以參考格式檔,您不需要以互動方式來重新輸入格式資訊。format 選項需要 -f 選項,建立 XML 格式檔也需要 -x 選項。如需詳細資訊,請參閱<建立格式檔案>。
data_file
這是資料檔的完整路徑。當資料大量匯入 SQL Server 時,資料檔會包含要複製到指定資料表或檢視表的資料。當從 SQL Server 大量匯出資料時,資料檔會包含從資料表或檢視表複製的資料。路徑可以有 1 至 255 個字元。資料檔最多可以包含 263 - 1 個資料列。重要事項 若為 format 選項,您必須指定 nul 做為 data_file (formatnul 的值)。
-mmax_errors
指定最多發生多少語法錯誤之後,便取消 bcp 作業。語法錯誤隱含對於目的地資料類型的資料轉換錯誤。max_errors 總計將只能在伺服器上偵測到的任何錯誤排除在外,例如條件約束違規。bcp 公用程式無法複製的資料列會予以忽略,且會做為一項錯誤來計算。如果未併入這個選項,預設值是 10。
[!附註]
-m 選項也不適用於轉換 money 或 bigint 資料類型。
-fformat_file
指定格式檔的完整路徑。這個選項的意義會依照下列方式,隨著使用它的環境而不同:如果 -f 與 format 選項一起使用,會對指定的資料表或檢視表建立所指定的 format_file。若要建立 XML 格式檔,另外,也請指定 -x 選項。如需詳細資訊,請參閱<建立格式檔案>。
當搭配 in 或 out 選項一起使用時,-f 需要一個現有的格式檔。
[!附註]
當使用格式檔時,in 或 out 選項是選擇性的。當沒有 -f 選項時,如果未指定 -n、-c、-w 或 -N,命令會提示您輸入格式資訊,且可讓您將回應儲存在格式檔案中 (預設檔案名稱是 Bcp.fmt)。
如果 format_file 的開頭是連字號 (-) 或斜線 (/),請勿在 -f 與 format_file 名稱之間加上空格。
-x
與 format 和 -fformat_file 選項一起使用,會產生以 XML 為基礎的格式檔案,而不是預設的非 XML 格式檔案。當匯入或匯出資料時,-x 無法運作。如果沒有與 format 和 -fformat_file 一起使用,它會產生錯誤。[!附註]
若要使用 -x 參數,您必須使用 bcp 10.0 用戶端。如需有關如何使用 bcp 10.0 用戶端的詳細資訊,請參閱本主題稍後的「備註」。
-eerr_file
指定用來儲存 bcp 公用程式無法從檔案傳送至資料庫之任何資料列的錯誤檔完整路徑。bcp 命令所產生的錯誤訊息會送往使用者的工作站。如果未使用這個選項,就不會建立錯誤檔。如果 err_file 的開頭是連字號 (-) 或斜線 (/),請勿在 -e 與 err_file 名稱之間加上空格。
-Ffirst_row
指定要從資料表匯出或從資料檔匯入之第一個資料列的號碼。這個參數需要大於 (>) 0、小於 (<) 或等於 (=) 總列數的值。如果沒有這個參數,預設值是檔案中的第一個資料列。first_row 可以是值高達 2^63-1 的正整數。-Ffirst_row 是以 1 為基底。
-Llast_row
指定要從資料表匯出或從資料檔匯入的最後一個資料列的號碼。這個參數需要大於 (>) 0 但小於 (<) 或等於 (=) 最後一個資料列號碼的值。如果沒有這個參數,預設值是檔案中的最後一個資料列。last_row 可以是值高達 2^63-1 的正整數。
-bbatch_size
指定每一批匯入資料的資料列數。每一批次是以個別交易匯入及記錄,是在認可之前匯入整個批次。根據預設,資料檔中的所有資料列是以一個批次匯入。若要在多個批次之間分散資料列,請指定小於資料檔之資料列數的 batch_size。如果有任何批次的交易失敗,只回復目前批次的插入項。以後的失敗不會影響已認可的交易所匯入的批次。請勿同時使用此選項與 **-h"**ROWS_PER_BATCH =bb" 選項。
如需詳細資訊,請參閱<管理大量匯入的批次>。
-ddatabase_name
指定要連接的資料庫。根據預設,bcp.exe 會連接到使用者的預設資料庫。如果指定 -ddatabase_name 連同三部分名稱 (database_name.schema.table,當做第一個參數傳遞給 bcp.exe),將會發生錯誤。這是因為您不得指定資料庫名稱兩次。
如果 database_name 的開頭是連字號 (-) 或斜線 (/),請勿在 -d 與資料庫名稱之間加上空格。
-n
利用資料的原生 (資料庫) 資料類型來執行大量複製作業。並非每個欄位都有這個選項的提示。它會使用原生值。如需詳細資訊,請參閱<使用原生格式匯入或匯出資料>。
-c
利用字元資料類型來執行作業。並非每個欄位都有這個選項的提示。它會使用 char 做為儲存類型 (沒有前置詞)、欄位分隔字元是 \t (定位字元),而且資料列結束字元是 \r\n (換行字元)。如需詳細資訊,請參閱<使用字元格式匯入或匯出資料>。
-N
如果是非字元資料,便利用資料的原生 (資料庫) 資料類型來執行大量複製作業;如果是字元資料,便利用 Unicode 字元來執行大量複製作業。這個選項是 -w 選項的高效能替代項目,它的用途是利用資料檔,在 SQL Server 的執行個體之間傳送資料。並非每個欄位都有這項提示。當您要傳送的資料包含 ANSI 擴充字元而且您要利用原生模式的效能時,請使用這個選項。如需詳細資訊,請參閱<使用 Unicode 原生格式匯入或匯出資料>。
從 SQL Server 2005 SP1 開始,當您要使用 bcp.exe 搭配 -N 匯出資料後再將該資料匯入相同的資料表結構描述時,如果有固定長度的非 Unicode 字元資料行 (例如,char(10)),您可能會看到一個截斷警告。
此警告可以忽略。解決這個警告的其中一個方式是使用 -n 來取代 -N。
-w
利用 Unicode 字元來執行大量複製作業。並非每個欄位都有這個選項的提示。它會使用 nchar 做為儲存類型 (沒有前置詞)、欄位分隔字元是 \t (定位字元),而且資料列結束字元是 \n (新行字元)。如需詳細資訊,請參閱<使用 Unicode 字元格式匯入或匯出資料>。
-V (70 | 80 | 90 )
利用舊版 SQL Server 的資料類型來執行大量複製作業。不是每個欄位都有這個選項的提示。它會使用預設值。70 = SQL Server 7.0
80 = SQL Server 2000
90 = SQL Server 2005
例如,若要產生 SQL Server 7.0 不支援但是在更新版的 SQL Server 中導入的資料類型 (如 bigint、sql_variant 和 xml),請使用 -V70 選項。
如需詳細資訊,請參閱<從舊版 SQL Server 匯入原生與字元格式資料>。
-q
在 bcp 公用程式和 SQL Server 執行個體之間的連接中,執行 SET QUOTED_IDENTIFIERS ON 陳述式。請利用這個選項來指定包含空格或單引號的資料庫、擁有者、資料表或檢視表名稱。請用引號 ("") 括住整個三部分資料表或檢視表名稱。若要指定包含空格或單引號的資料庫名稱,您必須使用 –q 選項。
-q 不適用於傳遞給 -d 的值。
如需詳細資訊,請參閱這個主題稍後的<備註>一節。
-C { ACP | OEM | RAW | code_page }
指定資料檔中之資料的字碼頁。唯有當資料包含的 char、varchar 或 text 資料行有大於 127 或小於 32 的字元值時,code_page 才會相關。[!附註]
我們建議您在格式檔案中,最好針對每一個資料行各指定一個定序名稱。
字碼頁值
說明
ACP
ANSI/Microsoft Windows (ISO 1252)。
OEM
用戶端所用的預設字碼頁。如果未指定 -C 的話,這是預設字碼頁。
RAW
不會將字碼頁轉換成另一種字碼頁。這是最快的選項,因為不進行轉換。
code_page
特定字碼頁編號;如 850。
重要事項SQL Server 不支援字碼頁 65001 (UTF-8 編碼)。如需詳細資訊,請參閱<在不同的定序間複製資料>。
-tfield_term
指定欄位結束字元。預設值是 \t (定位字元)。請利用這個參數來覆寫預設的欄位結束字元。如需詳細資訊,請參閱<指定欄位和資料列結束字元>。如果您在 bcp.exe 命令中使用十六進位表示法來指定欄位結束字元,該值將會在 0x00 處截斷。例如,如果您指定 0x410041,將會使用 0x41。
如果 field_term 的開頭是連字號 (-) 或斜線 (/),請勿在 -t 與 field_term 值之間加上空格。
-rrow_term
指定資料列結束字元。預設值是 \n (新行字元)。請利用這個參數來覆寫預設的資料列結束字元。如需詳細資訊,請參閱<指定欄位和資料列結束字元>。如果您在 bcp.exe 命令中使用十六進位表示法來指定資料列結束字元,該值將會在 0x00 處截斷。例如,如果您指定 0x410041,將會使用 0x41。
如果 row_term 的開頭是連字號 (-) 或斜線 (/),請勿在 -r 與 row_term 值之間加上空格。
-iinput_file
指定回應檔的名稱,回應檔包含利用互動模式 (未指定 -n、-c、-w 或 -N) 來執行大量複製時,在命令提示字元之下對於每個資料欄位之問題的回應。如果 input_file 的開頭是連字號 (-) 或斜線 (/),請勿在 -i 與 input_file 名稱之間加上空格。
-ooutput_file
指定接收在命令提示字元之下重新導向之輸出的檔案名稱。如果 output_file 的開頭是連字號 (-) 或斜線 (/),請勿在 -o 與 output_file 名稱之間加上空格。
-apacket_size
指定伺服器所收送之每個網路封包的位元組數。您可以利用 SQL Server Management Studio (或 sp_configure 系統預存程序) 來設定伺服器組態選項。不過,可使用這個選項個別覆寫伺服器組態選項。packet_size 可以從 4096 到 65535 位元組,預設值是 4096。增加封包大小可以增強大量複製作業的效能。若要求較大的封包,但無法授與這個封包,便會使用預設值。bcp 公用程式所產生的效能統計資料會顯示所用的封包大小。
-Sserver_name[ **\instance_name]
指定要連接的 SQL Server 執行個體。如果未指定任何伺服器,bcp 公用程式會連接至本機電腦中的 SQL Server 預設執行個體。當從網路中的遠端電腦或本機具名執行個體執行 bcp 命令時,需要這個選項。若要連接到伺服器上的 SQL Server 預設執行個體,只要指定 server_name。若要連接到 SQL Server 的具名執行個體,請指定 server_name\**instance_name。-Ulogin_id
指定用來連接 SQL Server 的登入識別碼。安全性注意事項 指定 bcp 公用程式使用整合式安全性的信任連接,連接到 SQL Server 時,請使用 -T 選項 (信任連接),而非 user name 和 password 的結合。
-Ppassword
指定登入識別碼的密碼。如果未使用此選項,bcp 命令會提示您輸入密碼。如果在未使用密碼的情況下,命令提示字元之下的尾端使用這個選項,bcp 會使用預設密碼 (NULL)。安全性注意事項 請勿使用空白密碼。請使用增強式密碼。
若要遮罩您的密碼,請勿搭配 -U 選項來指定 -P 選項。請在搭配 -U 選項及其他參數 (不指定 -P) 來指定 bcp 之後,按 ENTER 鍵,命令就會提示您輸入密碼。這個方法可確保在輸入密碼時,遮罩您的密碼。
如果 password 的開頭是連字號 (-) 或斜線 (/),請勿在 -P 與 password 之間加上空格。
-T
指定 bcp 公用程式使用整合式安全性的信任連接,連接到 SQL Server。網路使用者的安全性認證、login_id 和 password 不是必要的。如果未指定 –T,您就必須指定 –U 和 –P,才能順利登入。-v
報告 bcp 公用程式版本號碼和著作權。-R
指定利用定義給用戶端電腦地區設定的區域格式,將貨幣、日期和時間資料大量複製到 SQL Server 中。依預設,會忽略地區設定。-k
指定在作業期間,空白資料行應該保留 Null 值,而不是插入資料行的任何預設值。如需詳細資訊,請參閱<在大量匯入期間保留 Null 或使用預設值>。-E
指定識別欄位要使用匯入之資料檔中的一個或多個識別值。如果未提供 -E,就會忽略匯入的資料檔中這個資料行的識別值,而 SQL Server 會根據建立資料表期間所指定的初始值和遞增值來自動指派唯一值。如果資料檔中沒有資料表或檢視表中之識別欄位的值,請利用格式檔來指定,在匯入資料時,應該略過資料表或檢視表中的識別欄位。SQL Server 會自動指派資料行的唯一值。如需詳細資訊,請參閱<DBCC CHECKIDENT (Transact-SQL)>。
-E 選項需要特殊權限。如需詳細資訊,請參閱這個主題稍後的<備註>一節。
如需有關保留識別值的詳細資訊,請參閱<大量匯入資料時保留識別值>。
**-h"**hint[ ,...n] "
指定將資料大量匯入資料表或檢視表期間,所要使用的一個或多個提示。ORDER**(column[ASC | DESC] [,...n])**
資料檔中之資料的排序順序。如果匯入資料時是依照資料表的叢集索引來排序,將可提升大量匯入的效能。如果不是依照叢集索引鍵的順序排序資料檔,或是資料表沒有叢集索引,便會忽略 ORDER 子句。提供的資料行名稱必須是目的地資料表中的有效資料行名稱。根據預設,bcp 會假設資料檔沒有排序。為了達到最佳的大量匯入效果,SQL Server 也會驗證匯入的資料是否已排序。如需詳細資訊,請參閱<控制大量匯入資料時的排序順序>。
ROWS_PER_BATCH **=**bb
每一批資料的資料列數 (如 bb)。在未指定 -b 之時使用,結果會將整個資料檔當做單一交易傳給伺服器。伺服器根據 bb 值,將大量載入最佳化。根據預設,ROWS_PER_BATCH 是未知的。如需詳細資訊,請參閱<管理大量匯入的批次>。
KILOBYTES_PER_BATCH **=**cc
每一批資料的近似 KB 數 (如 cc)。根據預設,KILOBYTES_PER_BATCH 是未知的。如需詳細資訊,請參閱<管理大量匯入的批次>。
TABLOCK
指定在大量載入作業期間,取得大量更新資料表層級鎖定;否則,便取得資料列層級鎖定。這個提示會大幅提升效能,因為在大量複製作業期間保留鎖定,會減少爭用資料表鎖定的情況。如果資料表沒有索引,且指定了 TABLOCK,多個用戶端便可以同時載入這份資料表。根據預設,鎖定行為是由資料表選項 table lock on bulk load 所決定。如需詳細資訊,請參閱<控制大量匯入的鎖定行為>。
CHECK_CONSTRAINTS
指定在大量匯入作業期間,必須檢查目標資料表或檢視表的所有條件約束。當沒有 CHECK_CONSTRAINTS 提示時,會忽略所有 CHECK 和 FOREIGN KEY 條件約束,在作業之後,會將資料表的條件約束標記為不受信任。[!附註]
一律強制實施 UNIQUE、PRIMARY KEY 和 NOT NULL 條件約束。
在某些時候,您必須檢查整份資料表的條件約束。如果在大量匯入作業之前,資料表不是空的,重新驗證條件約束的成本,可能會超出在累加資料上套用 CHECK 條件約束的成本。因此,建議您在進行累加大量匯入期間,通常要啟用條件約束檢查。
如果輸入資料包含違反條件約束的資料列,您可能會想停用條件約束 (預設行為)。當停用 CHECK 條件約束時,您可以先匯入資料,再利用 Transact-SQL 陳述式來移除無效的資料。
[!附註]
bcp 現在會強制進行資料驗證和資料檢查,當針對資料檔中的無效資料來執行指令碼時,這些驗證和檢查作業可能會導致指令碼失敗。
[!附註]
-m max_errors 參數不適用於條件約束檢查。
如需詳細資訊,請參閱<控制大量匯入作業的條件約束檢查>。
FIRE_TRIGGERS
利用 in 引數來指定在大量複製作業期間,執行目的地資料表上所定義的任何插入觸發程序。如果未指定 FIRE_TRIGGERS,就不會執行任何插入觸發程序。out、queryout 和 format 引數的 FIRE_TRIGGERS 會遭到忽略。如需詳細資訊,請參閱<在大量匯入資料時,控制觸發程序的執行>。
備註
當您安裝 Microsoft SQL Server 2008 R2 工具時,也會安裝 bcp 10.0 用戶端。如果同時安裝 SQL Server 2008 R2 和 SQL Server 2005 的工具,則根據 PATH 環境變數的值而定,您也可以使用舊版的 bcp 用戶端來取代 bcp 10.0 用戶端。這個環境變數定義了 Windows 用來搜尋可執行檔的一組目錄。若要確定您所使用的版本,請在 Windows 命令提示字元中執行 bcp /v 命令。如需有關如何在 PATH 環境變數中設定命令路徑的詳細資訊,請參閱 Windows 說明。
只有在同時安裝 SQL Server 工具和 SQL Server Native Client 時,才能支援 XML 格式檔案。
如需有關 bcp 公用程式的尋找位置與執行方式,以及命令提示字元公用程式語法慣例的詳細資訊,請參閱<命令提示字元公用程式>。
如需有關準備大量匯入或匯出作業的詳細資訊,請參閱<準備大量匯出或匯入的資料>。
如需有關大量匯入所執行的資料列插入作業於何時記錄到交易記錄的詳細資訊,請參閱<大量匯入採用最低限度記錄的必要條件>。
原生資料檔案支援
在 SQL Server 2008 R2 中,bcp 公用程式只支援與 SQL Server 2000、SQL Server 2005、SQL Server 2008 和 SQL Server 2008 R2 相容的原生資料檔案。
計算資料行和時間戳記資料行
SQL Server 會忽略針對計算資料行或 timestamp 資料行匯入之資料檔中的值,並自動指派值。如果資料檔不包含資料表中計算資料行或 timestamp 資料行的值,請使用格式檔案指定在匯入資料時應略過資料表中的計算資料行或 timestamp 資料行。SQL Server 會自動指派資料行的值。
計算資料行和 timestamp 資料行會照常從 SQL Server 大量複製到資料檔中。
指定包含空格或引號的識別碼
SQL Server 識別碼可以包括內嵌空格和引號之類的字元。您必須依照下列方式來處理這些識別碼:
當您在命令提示字元之下,指定包含空格或引號的識別碼或檔案名稱時,請用引號 ("") 括住識別碼。
例如,下列 bcp out 命令會建立名稱為 Currency Types.dat 的資料檔:
bcp AdventureWorks2008R2.Sales.Currency out "Currency Types.dat" -T -c
若要指定包含空格或引號的資料庫名稱,您必須使用 -q 選項。
如果擁有者、資料表或檢視表名稱包含內嵌的空格或引號,您可以執行下列動作:
指定 -q 選項,或
在引號內,用方括號 ([]) 括住擁有者、資料表或檢視表名稱。
資料驗證
bcp 現在會強制進行資料驗證和資料檢查,當針對資料檔中的無效資料來執行指令碼時,這些驗證和檢查作業可能會導致指令碼失敗。例如,bcp 現在會驗證:
float 或 real 資料類型的原生表示法是否有效。
Unicode 資料的長度是否為偶數位元組。
可在舊版 SQL Server 中大量匯入的無效資料形式,現在可能無法載入。不過,在舊版中,除非用戶端嘗試存取無效資料,否則不會發生作業失敗的情況。新增的驗證會使大量載入之後的資料查詢,將出現意外的狀況減到最少。
大量匯出或匯入 SQLXML 文件
若要大量匯出或匯入 SQLXML 資料,請在格式檔案中使用下列其中一種資料類型。
資料類型 |
效果 |
---|---|
SQLCHAR 或 SQLVARYCHAR |
資料是使用用戶端字碼頁或定序所隱含的字碼頁所傳送。其效果與指定 -c 參數而不指定格式檔案是相同的。 |
SQLNCHAR 或 SQLNVARCHAR |
以 Unicode 格式傳送這份資料。其效果與指定 -w 參數而不指定格式檔案是相同的。 |
SQLBINARY 或 SQLVARYBIN |
未經任何轉換即傳送這份資料。 |
權限
bcpout 作業需要來源資料表的 SELECT 權限。
bcpin 作業至少需要目標資料表的 SELECT/INSERT 權限。另外,如果符合下列中的任何狀況,便需要 ALTER TABLE 權限:
存在有條件約束,而且未指定 CHECK_CONSTRAINTS 提示。
[!附註]
停用條件約束是預設行為。若要明確啟用條件約束,請搭配 CHECK_CONSTRAINTS 提示來使用 -h 選項。
存在有觸發程序,而且未指定 FIRE_TRIGGER 提示。
[!附註]
根據預設,系統不會引發觸發程序。若要明確引發觸發程序,請搭配 FIRE_TRIGGERS 提示來使用 -h 選項。
您利用 -E 選項,從資料檔中匯入識別值。
[!附註]
在 SQL Server 2005 中,目標資料表的 ALTER TABLE 權限是一項新的需求。如果使用者帳戶沒有目標資料表的 ALTER 資料表權限,這項新的需求可能使不強制實施觸發程序和條件約束檢查的 bcp 指令碼失敗。
字元模式 (-c) 和原生模式 (-n) 最佳作法
此章節具有字元模式 (-c) 和原生模式 (-n) 的建議事項。
(系統管理員/使用者) 請盡可能使用原生格式 (-n) 來避免分隔符號問題。您可以使用原生格式搭配 SQL Server 進行匯出和匯入。如果資料將匯入非 SQL Server 資料庫,請使用 -c 或 -w 選項來匯出 SQL Server 的資料。
(系統管理員) 使用 BCP OUT 時,請確認資料。例如,當您依序使用 BCP OUT、BCP IN 和 BCP OUT 時,請確認資料已正確匯出,而且結束字元值沒有當做某些資料值的一部分使用。請考慮使用隨機的十六進位值來覆寫預設結束字元 (使用 -t 和 -r 選項),避免在結束字元值與資料值之間發生衝突。
(使用者) 請使用長且唯一的結束字元 (位元組或字元的任何序列),將實際字串值發生衝突的可能性降到最低。您可以使用 -t 和 -r 選項來完成此作業。
範例
此章節包含下列範例:
A. 將資料表資料列複製到資料檔中 (使用信任連接)
B. 將資料表資料列複製到資料檔中 (使用混合模式驗證)
C. 將檔案資料複製到資料表中
D. 將特定資料行複製到資料檔中
E. 將特定資料列複製到資料檔中
F. 將查詢的資料複製到資料檔中
G. 建立非 XML 格式檔案
H. 建立 XML 格式檔案
I. 使用格式檔案以 bcp 進行大量匯入
A. 將資料表資料列複製到資料檔中 (使用信任連接)
下列範例說明 AdventureWorks2008R2.Sales.Currency 資料表上的 out 選項。這個範例會建立一個名稱為 Currency.dat 的資料檔,且會利用字元格式,將資料表的資料複製到這個資料檔中。這個範例假設您在使用 Windows 驗證,而且與您正在執行 bcp 命令的伺服器執行個體之間有信任連接。
請在命令提示字元之下,輸入下列命令:
bcp AdventureWorks2008R2.Sales.Currency out Currency.dat -T -c
B. 將資料表資料列複製到資料檔中 (使用混合模式驗證)
下列範例說明 Sales.Currency 資料表上的 out 選項。這個範例會建立一個名稱為 Currency.dat 的資料檔,且會利用字元格式,將資料表的資料複製到這個資料檔中。
此範例假設您使用的是混合模式驗證,您必須使用 -U 參數來指定您的登入識別碼。同時,除非您要連接到本機電腦上的 SQL Server 預設執行個體,否則請使用 -S 參數來指定系統名稱,並選擇性地指定執行個體名稱。
bcp AdventureWorks2008R2.Sales.Currency out Currency.dat -c -U<login_id> -S<server_name\instance_name>
系統會提示您輸入密碼。
C. 將檔案資料複製到資料表中
下列範例會利用先前範例 (Currency.dat) 中所建立的檔案來說明 in 選項。不過,這個範例會先建立空的 Sales.Currency 資料表複本 Sales.Currency2,以便將資料複製到這個複本中。這個範例假設您在使用 Windows 驗證,而且與您正在執行 bcp 命令的伺服器執行個體之間有信任連接。
若要在查詢編輯器中建立空的資料表,請輸入下列命令:
USE AdventureWorks2008R2;
GO
SELECT * INTO AdventureWorks2008R2.Sales.Currency2
FROM AdventureWorks2008R2.Sales.Currency WHERE 1=2
若要將字元資料大量複製到新資料表中 (也就是匯入資料),請在命令提示字元之下,輸入下列命令:
bcp AdventureWorks2008R2.Sales.Currency2 in Currency.dat -T -c
若要確認命令已順利完成,請在查詢編輯器中顯示資料表的內容,再輸入:
USE AdventureWorks2008R2;
GO
SELECT * FROM Sales.Currency2;
D. 將特定資料行複製到資料檔中
若要複製特定資料行,您可以使用 queryout 選項。下列範例只會將 Sales.Currency 資料表的 Name 資料行複製到資料檔中。這個範例假設您在使用 Windows 驗證,而且與您正在執行 bcp 命令的伺服器執行個體之間有信任連接。
請在 Windows 命令提示字元之下,輸入:
bcp "SELECT Name FROM AdventureWorks2008R2.Sales.Currency" queryout Currency.Name.dat -T -c
E. 將特定資料列複製到資料檔中
若要複製特定資料列,您可以使用 queryout 選項。下列範例只會將 Person.Person 資料表中名稱為 Jarrod Rana 之連絡人的資料列複製到資料檔 (Jarrod Rana.dat) 中。這個範例假設您在使用 Windows 驗證,而且與您正在執行 bcp 命令的伺服器執行個體之間有信任連接。
請在 Windows 命令提示字元之下,輸入:
bcp "SELECT * FROM AdventureWorks2008R2.Person.Person WHERE FirstName='Jarrod' AND LastName='Rana' " queryout "Jarrod Rana.dat" -T -c
F. 將查詢的資料複製到資料檔中
若要將 Transact-SQL 陳述式的結果集複製到資料檔中,請使用 queryout 選項。下列範例會依照先姓氏後名字的方式,將 AdventureWorks2008R2.Person.Person 資料表中的名稱複製到 Contacts.txt 資料檔中。這個範例假設您在使用 Windows 驗證,而且與您正在執行 bcp 命令的伺服器執行個體之間有信任連接。
請在 Windows 命令提示字元之下,輸入:
bcp "SELECT FirstName, LastName FROM AdventureWorks2008R2.Person.Person ORDER BY LastName, Firstname" queryout Contacts.txt -c -T
G. 建立非 XML 格式檔案
下列範例會針對 AdventureWorks2008R2 資料庫中的 Sales.Currency 資料表,建立 XML 格式檔案 Currency.fmt。這個範例假設您在使用 Windows 驗證,而且與您正在執行 bcp 命令的伺服器執行個體之間有信任連接。
請在 Windows 命令提示字元之下,輸入:
bcp AdventureWorks2008R2.Sales.Currency format nul -T -c -f Currency.fmt
如需詳細資訊,請參閱<了解非 XML 格式檔案>。
H. 建立 XML 格式檔案
下列範例會針對 AdventureWorks2008R2 資料庫中的 Sales.Currency 資料表來建立名稱為 Currency.xml 的 XML 格式檔。這個範例假設您在使用 Windows 驗證,而且與您正在執行 bcp 命令的伺服器執行個體之間有信任連接。
請在 Windows 命令提示字元之下,輸入:
bcp AdventureWorks2008R2.Sales.Currency format nul -T -c -x -f Currency.xml
[!附註]
若要使用 -x 參數,您必須使用 bcp 9.0 用戶端。如需有關如何使用 bcp 9.0 用戶端的詳細資訊,請參閱「備註」一節。
如需詳細資訊,請參閱<瞭解 XML 格式檔案>。
I. 使用格式檔案以 bcp 進行大量匯入
如果將資料匯入 SQL Server 執行個體時,要使用先前建立的格式檔,請搭配 in 選項來使用 -f 參數。例如,下列命令會利用先前建立的格式檔案 (Currency.xml),將 Currency.dat 資料檔的內容大量複製到 Sales.Currency 資料表的副本 (Sales.Currency2) 中。這個範例假設您在使用 Windows 驗證,而且與您正在執行 bcp 命令的伺服器執行個體之間有信任連接。
請在 Windows 命令提示字元之下,輸入:
bcp AdventureWorks2008R2.Sales.Currency2 in Currency.dat -T -f Currency.xml
[!附註]
當資料檔欄位與資料表資料行不同 (如號碼、排序或資料類型) 時,格式檔案就非常有用。如需詳細資訊,請參閱<用於匯入或匯出資料的格式檔案>。
其他範例
下列主題包含使用 bcp 的範例: