Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
platí pro:SQL Server
Azure SQL Database
Azure SQL Managed Instance
Azure Synapse Analytics
Analytics Platform System (PDW)
databáze SQL v Microsoft Fabric
Nástroj programu hromadného kopírování (bcp) kopíruje data mezi instancí SQL Serveru a datovým souborem v uživatelsky určeném formátu.
Remarks
Informace o tom, kde najít nebo jak spustit nástroj bcp a o konvencích syntaxe nástrojů příkazového řádku, naleznete v tématu příkazové nástroje SQL (Databázový stroj).
Informace o přípravě dat pro operace hromadného importu nebo exportu najdete v tématu Příprava dat pro hromadný export nebo import.
Informace o tom, kdy jsou v transakčním protokolu zaznamenány operace vložení řádku prováděné hromadným importem, naleznete v tématu Požadavky pro minimální protokolování hromadného importu.
Znaky
<,>,|,&a^jsou speciálními znaky příkazového shellu a musí být předcházeny únikovým znakem (^) nebo uzavřeny v uvozovkách, pokud jsou použity v řetězci (například"StringContaining&Symbol"). Pokud k uzavření řetězce obsahujícího jeden ze speciálních znaků použijete uvozovky, nastaví se uvozovky jako součást hodnoty proměnné prostředí. Další informace naleznete v tématu Použití dalších speciálních znaků.
Podpora nativních datových souborů
V SYSTÉMU SQL Server nástroj bcp podporuje nativní datové soubory kompatibilní s verzemi SQL Serveru počínaje SQL Serverem 2000 (8.x) a novějším.
Počítané sloupce a sloupce časového razítka
Hodnoty v datovém souboru, které jsou importovány pro vypočítané nebo timestampové sloupce, se ignorují a SQL Server automaticky přiřadí hodnoty. Pokud datový soubor neobsahuje hodnoty pro vypočítané nebo časové razítko sloupce v tabulce, použijte formátový soubor k určení, že vypočítané nebo časové razítko sloupce v tabulce by se při importu dat měly přeskočit; SQL Server automaticky přiřadí hodnoty pro sloupec.
Počítané a timestamp sloupce se hromadně kopírují z SQL Serveru do datového souboru obvyklým způsobem.
Určení identifikátorů obsahujících mezery nebo uvozovky
Identifikátory SQL Serveru můžou obsahovat znaky, jako jsou vložené mezery a uvozovky. Tyto identifikátory musí být považovány za následující:
Při zadání identifikátoru nebo názvu souboru, který obsahuje mezeru nebo uvozovky na příkazovém řádku, uzavřete identifikátor do uvozovek ("").
Například následující příkaz
bcp outvytvoří datový soubor s názvemCurrency Types.dat:bcp AdventureWorks2022.Sales.Currency out "Currency Types.dat" -T -cChcete-li zadat název databáze obsahující mezeru nebo uvozovky, musíte použít možnost
-q.U názvů vlastníka, tabulky nebo zobrazení, které obsahují mezery nebo uvozovky, můžete:
Zadejte možnost
-qneboUzavřete vlastníka, tabulku nebo název zobrazení do závorek (
[]) uvnitř uvozovek.
Ověření dat
bcp teď vynucuje ověření dat a kontroly dat, které můžou způsobit selhání skriptů, pokud se spustí na neplatných datech v datovém souboru. Například bcp teď ověří, že:
Nativní reprezentace plovoucích nebo skutečných datových typů jsou platné.
Data Unicode mají rovnoměrnou délku bajtu.
Formuláře neplatných dat, která je možné hromadně importovat v dřívějších verzích SQL Serveru, se teď nedají načíst; zatímco v dřívějších verzích k selhání nedošlo, dokud se klient nepokoušel získat přístup k neplatným datům. Přidané ověření snižuje riziko nečekaných výsledků při dotazování dat po hromadném načtení.
Hromadný export nebo import dokumentů SQLXML
K hromadnému exportu nebo importu dat SQLXML použijte jeden z následujících datových typů ve formátu souboru.
| Datový typ | Účinek |
|---|---|
SQLCHAR nebo SQLVARYCHAR |
Data se přenášejí na kódové stránce klienta nebo na kódové stránce určené kolací. Efekt je stejný jako určení přepínače -c bez zadání formátu souboru. |
SQLNCHAR nebo SQLNVARCHAR |
Data se odesílají jako Unicode. Efekt je stejný jako určení přepínače -w bez zadání formátu souboru. |
SQLBINARY nebo SQLVARYBIN |
Data se odesílají bez jakéhokoli převodu. |
Osvědčené postupy pro režim znaků (-c) a nativní režim (-n)
Tato část obsahuje doporučení pro režim znaků (-c) a nativní režim (-n).
(Správce/uživatel) Pokud je to možné, použijte nativní formát (
-n), abyste se vyhnuli problému s oddělovačem. K exportu a importu pomocí SQL Serveru použijte nativní formát. Export dat z SQL Serveru pomocí-cnebo-wmožnosti, pokud plánujete exportovat data do databáze jiného systému než SQL Server.(Správce) Při použití
bcp outověřte data. Když například použijetebcp out,bcp ina pakbcp out, ověřte, že jsou data správně exportována a že ukončovací hodnoty nejsou použity jako součást nějaké datové hodnoty. Zvažte přepsání výchozích ukončovačů (pomocí možností-ta-r) náhodnými šestnáctkovými hodnotami, aby nedocházelo ke konfliktům mezi ukončovacími hodnotami a datovými hodnotami.(Uživatel) Pokud chcete minimalizovat možnost konfliktu se skutečnou řetězcovou hodnotou, použijte dlouhý a jedinečný ukončovací znak (libovolnou posloupnost bajtů nebo znaků). Můžete to provést pomocí možností
-ta-r.
Příklady
Příklady v této části využívají ukázkovou databázi WideWorldImporters pro SQL Server 2016 (13.x) a novější verze, Azure SQL Database a Azure SQL Managed Instance.
WideWorldImporters lze stáhnout z https://github.com/Microsoft/sql-server-samples/releases/tag/wide-world-importers-v1.0. Podívejte se na příkazy RESTORE pro syntax obnovení ukázkové databáze.
Příklady testovacích podmínek
Kromě toho, kde je uvedeno jinak, příklady předpokládají, že používáte ověřování systému Windows a máte důvěryhodné připojení k instanci serveru, na které používáte příkaz bcp. V mnoha příkladech se používá adresář s názvem D:\bcp. Nahraďte <server_name> a další zástupné hodnoty hodnotami pro vaše prostředí.
Následující skript Transact-SQL vytvoří prázdnou kopii tabulky WideWorldImporters.Warehouse.StockItemTransactions a pak přidá omezení primárního klíče:
USE WideWorldImporters;
GO
SET NOCOUNT ON;
IF NOT EXISTS (SELECT *
FROM sys.tables
WHERE name = 'Warehouse.StockItemTransactions_bcp')
BEGIN
SELECT *
INTO WideWorldImporters.Warehouse.StockItemTransactions_bcp
FROM WideWorldImporters.Warehouse.StockItemTransactions
WHERE 1 = 2;
ALTER TABLE Warehouse.StockItemTransactions_bcp
ADD CONSTRAINT PK_Warehouse_StockItemTransactions_bcp
PRIMARY KEY NONCLUSTERED (StockItemTransactionID ASC);
END
Tabulku StockItemTransactions_bcp můžete podle potřeby zkrátit:
TRUNCATE TABLE WideWorldImporters.Warehouse.StockItemTransactions_bcp;
A. Identifikace verze nástroje bcp
Na příkazovém řádku zadejte následující příkaz:
bcp -v
B. Kopírování řádků tabulky do datového souboru (s důvěryhodným připojením)
Následující příklady ilustrují možnost out v tabulce WideWorldImporters.Warehouse.StockItemTransactions.
Basic
Tento příklad vytvoří datový soubor s názvem
StockItemTransactions_character.bcpa zkopíruje do něj data tabulky ve formátu znaku .Na příkazovém řádku zadejte následující příkaz:
bcp WideWorldImporters.Warehouse.StockItemTransactions out D:\bcp\StockItemTransactions_character.bcp -c -TExpanded
Tento příklad vytvoří datový soubor s názvem
StockItemTransactions_native.bcpa zkopíruje do něj data tabulky pomocí nativního formátu. Příklad také: určuje maximální počet chyb syntaxe, soubor chyby a výstupní soubor.Na příkazovém řádku zadejte následující příkaz:
bcp WideWorldImporters.Warehouse.StockItemTransactions OUT D:\bcp\StockItemTransactions_native.bcp -m 1 -n -e D:\bcp\Error_out.log -o D:\bcp\Output_out.log -S <server_name> -T
Zkontrolujte Error_out.log a Output_out.log.
Error_out.log by měla být prázdná. Porovnejte velikosti souborů mezi StockItemTransactions_character.bcp a StockItemTransactions_native.bcp.
C. Kopírování řádků tabulky do datového souboru (s ověřováním ve smíšeném režimu)
Následující příklad znázorňuje možnost out v tabulce WideWorldImporters.Warehouse.StockItemTransactions. Tento příklad vytvoří datový soubor s názvem StockItemTransactions_character.bcp a zkopíruje do něj data tabulky ve formátu znaku .
V příkladu se předpokládá, že používáte ověřování ve smíšeném režimu a k zadání přihlašovacího ID je nutné použít přepínač -U. Pokud se také nepřipojíte k výchozí instanci SQL Serveru v místním počítači, použijte přepínač -S k zadání názvu systému a volitelně názvu instance.
Na příkazovém řádku zadejte následující příkaz: (Systém vás vyzve k zadání hesla.)
bcp WideWorldImporters.Warehouse.StockItemTransactions out D:\bcp\StockItemTransactions_character.bcp -c -U<login_id> -S<server_name\instance_name>
D. Kopírování dat ze souboru do tabulky
Následující příklady ilustrují možnost in v tabulce WideWorldImporters.Warehouse.StockItemTransactions_bcp pomocí souborů vytvořených dříve.
Basic
V tomto příkladu se používá dříve vytvořený datový soubor
StockItemTransactions_character.bcp.Na příkazovém řádku zadejte následující příkaz:
bcp WideWorldImporters.Warehouse.StockItemTransactions_bcp IN D:\bcp\StockItemTransactions_character.bcp -c -TExpanded
V tomto příkladu se používá dříve vytvořený datový soubor
StockItemTransactions_native.bcp. Příklad také používá nápověduTABLOCKa určuje velikost dávky, maximální počet chyb syntaxe, chybový soubor a výstupní soubor.Na příkazovém řádku zadejte následující příkaz:
bcp WideWorldImporters.Warehouse.StockItemTransactions_bcp IN D:\bcp\StockItemTransactions_native.bcp -b 5000 -h "TABLOCK" -m 1 -n -e D:\bcp\Error_in.log -o D:\bcp\Output_in.log -S <server_name> -TZkontrolujte
Error_in.logaOutput_in.log.
E. Zkopírování konkrétního sloupce do datového souboru
Pokud chcete zkopírovat konkrétní sloupec, můžete použít možnost queryout. Následující příklad zkopíruje do datového souboru pouze sloupec StockItemTransactionID tabulky Warehouse.StockItemTransactions.
Na příkazovém řádku zadejte následující příkaz:
bcp "SELECT StockItemTransactionID FROM WideWorldImporters.Warehouse.StockItemTransactions WITH (NOLOCK)" queryout D:\bcp\StockItemTransactionID_c.bcp -c -T
F. Zkopírování konkrétního řádku do datového souboru
Pokud chcete zkopírovat konkrétní řádek, můžete použít možnost queryout. Následující příklad zkopíruje pouze řádek osoby s názvem Amy Trefl z tabulky WideWorldImporters.Application.People do datového souboru Amy_Trefl_c.bcp.
Note
Přepínač -d slouží k identifikaci databáze.
Na příkazovém řádku zadejte následující příkaz:
bcp "SELECT * from Application.People WHERE FullName = 'Amy Trefl'" queryout D:\bcp\Amy_Trefl_c.bcp -d WideWorldImporters -c -T
G. Kopírování dat z dotazu do datového souboru
Pokud chcete zkopírovat sadu výsledků z příkazu Transact-SQL do datového souboru, použijte možnost queryout. Následující příklad zkopíruje názvy z tabulky WideWorldImporters.Application.People seřazené úplným názvem do datového souboru People.txt.
Note
Přepínač -t slouží k vytvoření souboru s oddělovači.
Na příkazovém řádku zadejte následující příkaz:
bcp "SELECT FullName, PreferredName FROM WideWorldImporters.Application.People ORDER BY FullName" queryout D:\bcp\People.txt -t, -c -T
H. Vytváření formátových souborů
Následující příklad vytvoří tři různé soubory formátu pro tabulku Warehouse.StockItemTransactions v databázi WideWorldImporters. Zkontrolujte obsah každého vytvořeného souboru.
Na příkazovém řádku zadejte následující příkazy:
REM non-XML character format
bcp WideWorldImporters.Warehouse.StockItemTransactions format nul -f D:\bcp\StockItemTransactions_c.fmt -c -T
REM non-XML native format
bcp WideWorldImporters.Warehouse.StockItemTransactions format nul -f D:\bcp\StockItemTransactions_n.fmt -n -T
REM XML character format
bcp WideWorldImporters.Warehouse.StockItemTransactions format nul -f D:\bcp\StockItemTransactions_c.xml -x -c -T
Note
Přepínač -x je podporován pouze ve Windows.
Další informace naleznete v tématu Použití souborů formátu jiného formátu než XML (SQL Server) a souborů formátu XML (SQL Server).
I. Použijte soubor formátu k hromadnému importu pomocí bcp
Pokud chcete při importu dat do instance SQL Serveru použít dříve vytvořený formátovací soubor, použijte přepínač -f s možností in. Následující příkaz například hromadně zkopíruje obsah datového souboru StockItemTransactions_character.bcpdo kopie tabulky Warehouse.StockItemTransactions_bcp pomocí dříve vytvořeného formátu souboru StockItemTransactions_c.xml.
Note
Přepínač -L slouží k importu pouze prvních 100 záznamů.
Na příkazovém řádku zadejte následující příkaz:
bcp WideWorldImporters.Warehouse.StockItemTransactions_bcp in D:\bcp\StockItemTransactions_character.bcp -L 100 -f D:\bcp\StockItemTransactions_c.xml -T
Note
Formátovací soubory jsou užitečné, když se pole datových souborů liší od sloupců tabulky; Například v jejich čísle, řazení nebo datových typech. Další informace najdete v tématu Formátovat soubory pro import nebo export dat (SQL Server).
J. Určete znakovou stránku
Následující příklad částečného kódu ukazuje import bcp se specifikací znakové stránky 65001:
bcp MyTable in "D:\data.csv" -T -c -C 65001 -t , ...
K. Příklad výstupního souboru s využitím vlastního pole a ukončovače řádků
Tento příklad ukazuje dva ukázkové soubory vygenerované bcp pomocí vlastních ukončovačů polí a řádků.
Vytvořte tabulku
dbo.T1v databázitempdbse dvěma sloupci,IDaName.USE tempdb; GO CREATE TABLE dbo.T1 ( ID INT, [Name] NVARCHAR (20) ); GO INSERT INTO dbo.T1 VALUES (1, N'Natalia'); INSERT INTO dbo.T1 VALUES (2, N'Mark'); INSERT INTO dbo.T1 VALUES (3, N'Randolph'); GOVygenerujte výstupní soubor z ukázkové tabulky
dbo.T1pomocí vlastního ukončovače pole.V tomto příkladu
-t ,určuje vlastní ukončovací znak pole. Nahraďte<server_name>hodnotou pro vaše prostředí.bcp dbo.T1 out T1.txt -T -S <server_name> -d tempdb -w -t ,Tady je soubor výsledků.
1,Natalia 2,Mark 3,RandolphVygenerujte výstupní soubor z ukázkové tabulky
dbo.T1pomocí vlastního ukončovače pole a vlastního ukončování řádku.V tomto příkladu
-t ,určuje vlastní ukončovací znak pole a-r :určuje vlastní ukončovací znak řádku. Nahraďte<server_name>hodnotou pro vaše prostředí.bcp dbo.T1 out T1.txt -T -S <server_name> -d tempdb -w -t , -r :Tady je soubor výsledků.
1,Natalia:2,Mark:3,Randolph:Note
Ukončovací znak řádku se vždy přidá, a to i do posledního záznamu. Ukončovací znak pole se ale nepřidá do posledního pole.
Další příklady
Následující články obsahují příklady použití bcp:
Formáty dat pro hromadný import nebo hromadný export (SQL Server)
zachovat hodnoty null nebo výchozí hodnoty během hromadného importu (SQL Server)
Zachovat hodnoty identity při hromadném importu dat (SQL Server)
Formátování souborů pro import nebo export dat (SQL Server)
- Vytvoření formátu souboru pomocí bcp (SQL Server)
- Použití formátu souboru k hromadnému importu dat (SQL Server)
- Přeskočit sloupec tabulky (SQL Server) pomocí formátového souboru
- Použití formátu souboru k přeskočení datového pole (SQL Server)
- Mapování sloupců tabulky na pole datových souborů (SQL Server) pomocí formátového souboru
Příklady hromadného importu a exportu dokumentů XML (SQL Server)
Související obsah
- Příprava dat pro hromadný export nebo import
- hromadné vložení (Transact-SQL)
- OPENROWSET (Transact-SQL)
- SET QUOTED_IDENTIFIER (Transact-SQL)
-
sp_configure (Transact-SQL) - sp_tableoption (Transact-SQL)
- Formát souborů pro import nebo export dat (SQL Server)
Získejte pomoc 
- Návrhy pro SQL: Máte návrhy na vylepšení SQL Serveru?
- Microsoft Otázky a odpovědi (SQL Server)
- DBA Stack Exchange (značka sql-server): Položte dotazy k SQL Serveru
- Stack Overflow (značka sql-server): Odpovědi na otázky týkající se vývoje SQL
- Licenční podmínky a informace pro Microsoft SQL Server
- Možnosti podpory pro firemní uživatele
- Další nápověda a zpětná vazba k SQL Serveru
Přispějte k dokumentaci SQL
Věděli jste, že obsah SQL můžete upravovat sami? Pokud to uděláte, nejen že vám pomůžete vylepšit naši dokumentaci, ale také jste získali kredit jako přispěvatel na stránku.
Další informace naleznete v Upravit dokumentaci Microsoft Learn.