bcp檔案

bcp檔案是存儲由大容量複製實用工具或同步創建的大容量複製數據的檔案。

基本介紹

  • 中文名:bcp檔案
  • 外文名:bcp file
語法,參數含義,示例,

語法

bcp {[[database_name.][owner].]{table_name | view_name} | "query"}
{in | out | queryout | format} data_file
[-mmax_errors] [-fformat_file] [-x] [-eerr_file]
[-Ffirst_row] [-Llast_row] [-bbatch_size]
[-n] [-c] [-w] [-N] [-V (60 | 65 | 70 | 80)] [-6]
[-q] [-C { ACP | OEM | RAW | code_page } ] [-tfield_term]
[-rrow_term] [-iinput_file] [-ooutput_file] [-apacket_size]
[-Sserver_name[\instance_name]] [-Ulogin_id] [-Ppassword]
[-T] [-v] [-R] [-k] [-E] [-h"hint [,...n]"]

參數含義

database_name
指定的表或視圖所在資料庫的名稱。如果不指定,則使用用戶的默認資料庫。
owner
表或視圖所有者的名稱。如果執行該操作的用戶擁有指定的表或視圖,則 owner 是可選的。如果未指定 owner,並且執行該操作的用戶沒有指定的表或視圖,則 SQL Server 2005 將返回錯誤訊息,同時取消操作。
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。
in | , out| , queryout | , format
指定大容量複製的方向,具體如下:
in 從檔案複製到資料庫表或視圖。
注意:
SQL Server 6.5 的 bcp 實用工具不支持向包含 sql_variant 或 bigint數據類型的表進行大容量複製。
out 從資料庫表或視圖複製到檔案。
queryout 從查詢中複製,僅當從查詢大容量複製數據時才必須指定此選項。
format 根據指定的選項(-n、-c、-w、-6 或 -N)以及表或視圖的分隔設定創建格式檔案。大容量複製數據時,
bcp 命令可以引用一個格式檔案,從而避免以互動方式重複輸入格式信息。format 選項要求指定 -f 選項;創建一個 XML 格式檔案時還需要指定 -x 選項。有關詳細信息,請參閱創建格式化檔案。
data_file
數據檔案的完整路徑。將數據大容量導入 SQL Server 時,數據檔案將包含要複製到指定表或視圖的數據。從 SQL Server 大容量導出複製數據時,數據檔案將包含從表或視圖複製的數據。路徑可以有 1 到 255 個字元。數據檔案最多可包含 2,147,483,647 行。
重要事項:
對於 format 選項,必須指定 nul 作為 data_file (format nul) 的值。
-m max_errors
指定 bcp 操作允許的語法錯誤最大數目。語法錯誤是指將數據轉換為目標數據類型時的錯誤。max_errors 總數不包括只能在伺服器中檢測到的錯誤,如違反約束。
無法由 bcp 複製的每個行都將被忽略,並計為一個錯誤。如果不指定此選項,則默認為 10。
注意:
-m 選項也不用於轉換 money 或 bigint 數據類型。
-f format_file
指定一個格式檔案的完整路徑。該選項的含義取決於使用它的環境,具體如下:
如果 -f 與 format 選項一起使用,則將為指定的表或視圖創建指定的 format_file。若要創建 XML 格式檔案,請同時指定 -x 選項。
如果與 in 或 out 一起使用,則應為 -f 指定一個現有的格式檔案。
注意:
與 in 或 out 選項一起使用時,格式檔案是可選的。如果沒有 -f 選項,則在未指定 -n、-c、-w、-6 或 -N 時,該命令將提示輸入格式信息,並允許用戶將回應保存在格式檔案(默認名稱為 Bcp.fmt)中。
-x
與 format 和 -f format_file 選項一起使用,可以生成基於 XML 的格式化檔案,而不是默認的非 XML 格式化檔案。在導入或導出數據時,-x 不起作用。如果不與 format 和 -f format_file 一起使用,則將生成錯誤。
-e err_file
指定錯誤檔案的完整路徑,此檔案用於存儲 bcp 無法從檔案傳輸到資料庫的所有行。bcp 命令產生的錯誤訊息將被傳送到用戶的工作站。如果不使用此選項,則不會創建錯誤檔案。
-F first_row
指定要從表中導出或從數據檔案導入的第一行的編號。此參數應大於 (>) 0,小於 (<) 或等於 (=) 總行數。如果不指定此參數,則默認為檔案的第一行。
-L last_row
指定要從表中導出或從數據檔案導入的最後一行的編號。此參數應大於 (>) 0,小於 (<) 或等於 (=) 最後一行的編號。如果不指定該參數,則默認為檔案的最後一行。
-b batch_size
指定每批導入數據的行數。每批均作為一個單獨的事務進行導入並記錄,在提交之前會導入整批。默認情況下,數據檔案中的所有行均作為一批導入。若要在多批之間分布行,請指定小於數據檔案中行數的 batch_size。如果任何批的事務失敗,則只回滾當前批中的插入。已經由已提交事務導入的批不會受到將來失敗的影響。
請不要將該選項與 -h"ROWS_PER_BATCH = bb" 選項一起使用。
-n
使用數據的本機(資料庫)數據類型執行大容量複製操作。此選項不提示輸入每個欄位,它將使用本機值。
-c
使用字元數據類型執行該操作。此選項不提示輸入每個欄位;它使用 char 作為存儲類型,不帶前綴;使用 \t(制表符)作為欄位分隔設定,使用 \n(換行符)作為行終止符。
-w
使用 Unicode 字元執行大容量複製操作。此選項不提示輸入每個欄位;它使用 nchar 作為存儲類型,不帶前綴;使用 \t(制表符)作為欄位分隔設定,使用 \n(換行符)作為行終止符。該選項不能在 SQL Server 6.5 或更低版本中使用。
-N
執行大容量複製操作時,對非字元數據使用本機(資料庫)數據類型數據,對字元數據使用 Unicode 字元。此選項是 -w 選項的一個替代選項,並具有更高的性能。該選項主要用於使用數據檔案,將數據從一個 SQL Server 實例傳送到另一個實例。該選項不提示輸入每個欄位。如果要傳送包含 ANSI 擴展字元的數據,並希望利用本地模式的性能優勢,則可使用此選項。-N 不能在 SQL Server 6.5 或更低版本中使用。
-V ( 60| 65| 70| 80)
使用 SQL Server 早期版本中的數據類型執行大容量複製操作。此選項並不提示輸入每個欄位,它將使用默認值。例如,若要將隨 SQL Server 6.5 提供的 bcp 實用工具支持(但 ODBC 不再支持)的日期格式大容量複製到 SQL Server 2005,可使用 -V 65 參數。
重要事項:
如果將大量數據從 SQL Server 導出到數據檔案,那么即使指定了 -V,bcp 實用工具也不會為任何 datetime 或 smalldatetime 數據生成SQL Server 6.0 或 SQL Server 6.5 日期格式。日期將始終以 ODBC 格式寫入。另外,由於 SQL Server 6.5 或更低版本不支持可為空的 bit 數據,因此位列中的空值將寫為值 0。
-6
使用 SQL Server 6.0 或 SQL Server 6.5 數據類型執行大容量複製操作。支持此選項僅為與較早版本兼容。對於 SQL Server 7 及更高版本,請使用 -V 選項。
-q
在連線 bcp 實用工具和 SQL Server 實例時,執行 SET QUOTED_IDENTIFIERS ON 語句。使用此選項可以指定包含空格或單引號的資料庫、所有者、表或視圖的名稱。將由三部分組成的整個表名或視圖名用英文雙引號 ("") 括起來。
若要指定包含空格或單引號的資料庫名稱,必須使用 -q 選項。
有關詳細信息,請參閱本主題後面的“備註”。
-C { ACP | OEM | RAW | code_page }
用於兼容 SQL Server 的早期版本。對於 SQL Server 7.0 及更高版本,Microsoft 建議在格式檔案中為每個列指定一個排序規則名稱。
指定數據檔案中數據的代碼頁。僅當數據包含字元值大於 127 或小於 32 的 char、varchar 或 text 列時,code_page 才適用。
代碼頁值 說明
ACP
ANSI/Microsoft Windows (ISO 1252)。
OEM
客戶端使用的默認代碼頁。未指定 -C 選項時使用的默認代碼頁
RAW
不進行代碼頁間的轉換。因為不進行轉換,所以這是最快的選項。
code_page
特定的代碼頁編號,例如 850。
-t field_term
指定欄位終止符。默認值為 \t(制表符)。使用此參數可以替代默認欄位終止符。
-r row_term
指定行終止符。默認值為 \n(換行符)。使用此參數可替代默認行終止符。
-i input_file
指定回響檔案的名稱,其中包含在互動模式(未指定 -n、-c、-w、-6 或 -N)下執行大容量複製時,對該命令要求輸入每個數據欄位的提示信息作出的回響。
-o output_file
指定檔案名稱稱,該檔案用於接收從命令提示符重定向來的輸出。
-a packet_size
指定伺服器發出或接收的每個網路數據包的位元組數。可以使用 SQL Server Management Studio(或 sp_configure 系統存儲過程)來設定伺服器配置選項。但是,可以使用該選項逐個替代伺服器配置選項。packet_size 的取值範圍為 4096 到 65535 位元組,默認為 4096 位元組。
增大數據包可以提高大容量複製操作的性能。如果無法得到請求的較大數據包,則使用默認值。bcp 實用工具生成的性能統計信息可以顯示所用數據包的大小。
-S server_name[ \instance_name]
指定要連線的 SQL Server 的實例。如果不指定伺服器,則 bcp 實用工具將連線到本地計算機上的默認 SQL Server 實例。如果從網路或本地命名實例上的遠程計算機運行 bcp ,則必須使用此選項。若要連線到伺服器的 SQL Server 默認實例,請僅指定 server_name。若要連線到 SQL Server 2005 的命名實例,請指定 server_name\instance_name。
-U login_id
指定用於連線 SQL Server 的登錄 ID。
安全性 注意:
如果 bcp 實用工具使用集成安全性的可信連線與 SQL Server 進行連線,則使用 -T 選項(可信連線),而不要使用 user name 和 password 組合。
-P password
指定登錄 ID 的密碼。如果不使用此選項,bcp 命令將提示輸入密碼。如果在命令提示符的末尾使用此選項,但不提供密碼,則 bcp 將使用默認密碼 (NULL)。
安全性 注意:
不要使用空密碼。請使用不易破解的密碼。
若要禁止密碼,請不要同時使用 -U 和 -P 選項。而應在指定 bcp 以及 -U 選項和其他開關(不指定 -P)之後,按 Enter 鍵,這時命令會提示輸入密碼。這種方法可以確保密碼在輸入時被禁止。
-T
指定 bcp 實用工具通過使用集成安全性的受信任連線連線到 SQL Server。不需要網路用戶的安全憑據、login_id 和 password。如果不指定 –T,則需要指定 –U 和 –P 才能成功登錄。
-v
報告 bcp 實用工具的版本號和著作權。
-R
指定使用客戶端計算機區域設定中定義的區域格式,將貨幣、日期和時間數據大容量複製到 SQL Server 中。默認情況下,將忽略區域設定
-k
指定在操作過程中空列應該保留空值,而不是所插入列的任何默認值。
-E
指定導入的數據檔案中的標識值用於標識列。如果不指定 -E,則將忽略被導入的數據檔案中此列的標識值,而且 SQL Server 2005 將根據創建表期間指定的種子值和增量值自動分配唯一值。
假如數據檔案不包含表或視圖中的標識列的值,則可在格式檔案指定,在導入數據時忽略表或視圖中的標識列;SQL Server 2005 將自動為該列分配唯一值。有關詳細信息,請參閱 DBCC CHECKIDENT (Transact-SQL)。
-E 選項有一個特殊的許可權要求。有關詳細信息,請參閱本主題後面的“備註”。
-h " hint[ ,... n] "
指定向表或視圖中大容量導入數據時所用的提示。向 SQL Server 6.x 或更低版本大容量複製數據時,不能使用此選項。
ORDER(column [ASC | DESC] [,...n])
數據檔案中的數據排序次序。如果根據表中的聚集索引對要載入的數據排序,則可提高大容量複製的性能。如果數據檔案按不同次序排序,或者該表沒有聚集索引,則將忽略 ORDER 提示。提供的列名必須是目標表中的有效列。默認情況下,bcp 假設數據檔案沒有排序。
ROWS_PER_BATCH = bb
每批中數據的行數(即 bb)。在未指定 -b 時使用,這將導致整個數據檔案被作為單個事務傳送到伺服器。伺服器根據 bb 值最佳化大容量載入。默認情況下,ROWS_PER_BATCH 未知。
KILOBYTES_PER_BATCH = cc
每批以千位元組計的數據的近似值(即 cc)。默認情況下,KILOBYTES_PER_BATCH 未知。
TABLOCK
指定在大容量載入操作期間獲取大容量更新表級別的鎖;否則,獲取行級別的鎖。由於在大容量複製操作期間擁有鎖可以減少表中的鎖爭奪,所以此提示可顯著提高性能。如果表沒有索引並且指定了 TABLOCK,則該表可以同時被多個客戶端裝載。默認情況下,鎖定行為由表選項 table lock on bulk load 確定。
CHECK_CONSTRAINTS
指定在大容量導入操作期間,必須檢查所有對目標表或視圖的約束。如果沒有 CHECK_CONSTRAINTS 提示,則忽略所有 CHECK 約束;操作完成後,對表的約束將被標記為不可信。
注意:
始終強制使用 UNIQUE、PRIMARY KEY、FOREIGN KEY 或 NOT NULL 約束。
在某些時候,需要檢查整個表的約束。如果在大容量導入操作之前表為非空狀態,則重新驗證約束的開銷可能超過將 CHECK 約束套用於增量數據的開銷。因此,Microsoft 建議您在正常情況下,在進行增量式大容量導入時,啟用約束檢查。
當輸入數據包含違反約束的行時,您可能希望禁用約束(默認行為)。如果禁用 CHECK 約束,您可以導入數據,然後使用 Transact-SQL 語句刪除無效數據。
注意:
在 SQL Server 2005 中,bcp 會強制執行新的數據驗證和數據檢查,這將導致對數據檔案中的無效數據執行現有腳本時,可能會失敗。
注意:
-mmax_errors 開關不適用於約束檢查。
FIRE_TRIGGERS
與 in 參數一同指定,對目標表中定義的任何插入觸發器都將在大容量複製操作期間運行。如果不指定 FIRE_TRIGGERS,將不運行任何插入觸發器。對於 out、queryout 和 format 參數,將忽略 FIRE_TRIGGERS。
注意:
每個批的觸發器只運行一次(而不是每個行一次)。

示例

將表行複製到數據檔案(使用可信連線)
下面的示例闡釋了 AdventureWorks.Sales.Currency 表中的 out 選項。此示例創建一個名為 Currency.dat 的數據檔案,並使用字元格式將表數據複製到該檔案中。此示例假定您使用 Windows身份驗證,並且與運行 bcp 命令所針對的伺服器實例之間具有受信任連線
命令提示符處輸入以下命令:
bcp AdventureWorks.Sales.Currency out Currency.dat -T -c
將表行複製到數據檔案(使用混合模式身份驗證
下面的示例闡釋了 AdventureWorks.Sales.Currency 表中的 out 選項。此示例創建一個名為 Currency.dat 的數據檔案,並使用字元格式將表數據複製到該檔案中。
以上示例假定您使用的是混合模式身份驗證,您必須使用 -U 開關來指定登錄 ID。此外,除非您連線的是本地計算中 SQL Server 上的默認實例,否則要使用 -S 開關來指定系統名稱和實例名稱(實例名稱可選)。
bcp AdventureWorks.Sales.Currency out Currency.dat -c -U<login_id> -S<server_name\instance_name>
系統將提示您輸入密碼。
將數據從檔案複製到表。
以下示例使用上例創建的檔案 (Currency.dat) 來闡釋 in 選項。但是,此示例將首先創建一個 AdventureWorks Sales.Currency 表的空副本 Sales.Currency2,數據將被複製到該副本。此示例假定您使用 Windows身份驗證,並且與運行 bcp 命令所針對的伺服器實例之間具有受信任連線。
若要創建空表,可在查詢編輯器中輸入以下命令:
USE AdventureWorks;
GO
SELECT * INTO AdventureWorks.Sales.Currency2
FROM AdventureWorks.Sales.Currency WHERE 1=2
若要將字元數據大容量複製到新表(即導入數據),可在命令提示符處輸入以下命令:
bcp AdventureWorks.Sales.Currency2 in Currency.dat -T -c
若要查看命令是否成功,並在查詢編輯器中顯示錶的內容,請輸入:
USE AdventureWorks;
GO
SELECT * FROM Sales.Currency2
將特定的列複製到數據檔案中
若要複製特定列,可以使用 queryout 選項。以下示例僅將 Sales.Currency 表中的 Name 列複製到數據檔案中。此示例假定您使用 Windows身份驗證,並且與運行 bcp 命令所針對的伺服器實例之間具有受信任的連線。
在 Windows命令提示符下,輸入以下內容:
bcp "SELECT Name FROM AdventureWorks.Sales.Currency" queryout Currency.Name.dat -T -c
將特定的行複製到數據檔案中
若要複製特定行,可以使用 queryout 選項。以下示例僅將名為 Jarrod Rana 的聯繫人行從 AdventureWorks.Person.Contact 表複製到數據檔案 (Jarrod Rana.dat) 中。該示例假定您使用的是 Windows 身份驗證,並且與運行 bcp 命令的伺服器上的實例有可信連線。
在 Windows 命令提示符下,輸入以下內容:
bcp "SELECT * FROM AdventureWorks.Person.Contact WHERE FirstName='Jarrod' AND LastName='Rana' " queryout "Jarrod Rana.dat" -T -c
將數據從查詢複製到數據檔案
若要將 Transact-SQL 語句的結果集複製到數據檔案,可使用 queryout 選項。以下示例將 AdventureWorks.Person.Contact 表中的姓名複製到 Contacts.txt 數據檔案中;這些姓名先按名排序,再按姓排序。此示例假定您使用 Windows 身份驗證,並且與運行 bcp 命令所針對的伺服器實例之間具有受信任的連線。
在 Windows 命令提示符下,輸入以下內容:
bcp "SELECT FirstName, LastName FROM AdventureWorks.Person.Contact ORDER BY LastName, Firstname" queryout Contacts.txt -c -T
創建非 XML 格式檔案
AdventureWorks 資料庫中的 Sales.Currency 表的非 XML 格式檔案 Currency.fmt。此示例假定您使用 Windows 身份驗證,並且與運行 bcp 命令所針對的伺服器實例之間具有受信任的連線。
在 Windows 命令提示符下,輸入以下內容:
bcp AdventureWorks.Sales.Currency format nul -T -c -f Currency.fmt
有關詳細信息,請參閱了解非 XML 格式化檔案。
創建 XML 格式檔案
以下示例為 AdventureWorks 資料庫中的 Sales.Currency 表創建一個名為 Currency.xml 的 XML 格式檔案。此示例假定您使用 Windows 身份驗證,並且與運行 bcp 命令所針對的伺服器實例之間具有受信任的連線。
在 Windows 命令提示符下,輸入以下內容:
bcp AdventureWorks.Sales.Currency format nul -T -c -x -f Currency.xml
有關詳細信息,請參閱了解 XML 格式化檔案。
使用格式檔案進行 bcp 大容量導入
向 SQL Server 的實例導入數據時,若要使用以前創建的格式檔案,可同時使用 -f 開關和 in 選項。例如,以下命令通過使用先前創建的格式檔案(Currency.xml),將數據檔案 Currency.dat 的內容大容量複製到 Sales.Currency 表 (Sales.Currency2) 的副本中。此示例假定您使用 Windows 身份驗證,並且與運行 bcp 命令所針對的伺服器實例之間具有受信任的連線。
在 Windows 命令提示符下,輸入以下內容:
bcp AdventureWorks.Sales.Currency2 in Currency.dat -T -f Currency.xml
如果數據檔案欄位和表中的列不同(例如,在編號、排序或數據類型方面),則可使用格式檔案。

相關詞條

熱門詞條

聯絡我們