Notatka
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Zastosowanie:SQL Server
Azure SQL Database
Azure SQL Managed Instance
Azure Synapse Analytics
Analytics Platform System (PDW)
SQL database in Microsoft Fabric
Narzędzie programu do kopiowania zbiorczego (bcp) kopiuje dane między wystąpieniem programu SQL Server i plikiem danych w formacie określonym przez użytkownika.
Uwagi
Aby uzyskać informacje o tym, gdzie znaleźć lub jak uruchomić narzędzie bcp i o konwencji składni narzędzi wiersza polecenia, zobacz Narzędzia wiersza polecenia SQL (aparat bazy danych).
Aby uzyskać informacje na temat przygotowywania danych do operacji importowania lub eksportowania zbiorczego, zobacz Przygotowywanie danych do eksportu lub importu zbiorczego.
Aby uzyskać informacje o tym, kiedy operacje wstawiania wierszy wykonywane przez importowanie zbiorcze są rejestrowane w dzienniku transakcji, zobacz Wymagania wstępne dotyczące minimalnego rejestrowania w importowaniu zbiorczym.
Znaki
<,>,|,&i^są specjalnymi znakami powłoki poleceń i muszą być poprzedzone znakiem ucieczki (^) lub ujęte w cudzysłowach, gdy są używane w łańcuchu (na przykład"StringContaining&Symbol"). Jeśli używasz cudzysłowów do ujęć ciąg zawierający jeden z znaków specjalnych, znaki cudzysłowu są ustawiane jako część wartości zmiennej środowiskowej. Aby uzyskać więcej informacji, zobacz Używanie dodatkowych znaków specjalnych.
Natywna obsługa plików danych
W programie SQL Server narzędzie bcp obsługuje natywne pliki danych zgodne z wersjami programu SQL Server, począwszy od programu SQL Server 2000 (8.x) i nowszych.
Obliczone kolumny i kolumny sygnatury czasowej
Wartości w pliku danych importowanym dla kolumn obliczeniowych lub sygnatur czasowych są ignorowane, a program SQL Server automatycznie przypisuje wartości. Jeśli plik danych nie zawiera wartości kolumn obliczonych lub sygnatur czasowych w tabeli, użyj pliku formatu, aby określić, że kolumny obliczone lub sygnatury czasowej w tabeli powinny zostać pominięte podczas importowania danych; Program SQL Server automatycznie przypisuje wartości dla kolumny.
Kolumny obliczone i kolumny typu 'timestamp' są zbiorczo kopiowane z serwera SQL Server do pliku danych w zwykły sposób.
Określanie identyfikatorów zawierających spacje lub znaki cudzysłowu
Identyfikatory programu SQL Server mogą zawierać znaki, takie jak osadzone spacje i znaki cudzysłowu. Takie identyfikatory muszą być traktowane w następujący sposób:
Po określeniu identyfikatora lub nazwy pliku zawierającego spację lub cudzysłów w wierszu polecenia należy ująć identyfikator w cudzysłów ("").
Na przykład następujące
bcp outpolecenie tworzy plik danych o nazwieCurrency Types.dat:bcp AdventureWorks2022.Sales.Currency out "Currency Types.dat" -T -cAby określić nazwę bazy danych zawierającą spację lub cudzysłów, należy użyć
-qopcji .W przypadku nazw właścicieli, tabel lub widoków zawierających osadzone spacje lub znaki cudzysłowu można wykonać następujące czynności:
Określ
-qopcję lubUmieść nazwę właściciela, tabeli lub widoku w nawiasach kwadratowych (
[]) wewnątrz cudzysłowów.
Walidacja danych
Narzędzie bcp wymusza teraz sprawdzanie poprawności danych i sprawdzanie danych, które mogą powodować niepowodzenie skryptów, jeśli są wykonywane na nieprawidłowych danych w pliku danych. Na przykład narzędzie bcp sprawdza teraz, czy:
Natywne reprezentacje typów danych zmiennoprzecinkowych lub realnych są prawidłowe.
Dane Unicode mają parzystą długość bajtów.
Nie można teraz załadować formularzy nieprawidłowych danych, które mogą być importowane zbiorczo we wcześniejszych wersjach programu SQL Server; mając na uwadze, że we wcześniejszych wersjach błąd nie wystąpił, dopóki klient nie próbował uzyskać dostępu do nieprawidłowych danych. Dodana walidacja minimalizuje niespodzianki podczas wykonywania zapytań dotyczących danych po zbiorczym załadowaniu.
Zbiorcze eksportowanie lub importowanie dokumentów SQLXML
Aby zbiorczo wyeksportować lub zaimportować dane SQLXML, użyj jednego z następujących typów danych w pliku formatu.
| Typ danych | Efekt |
|---|---|
SQLCHAR lub SQLVARYCHAR |
Dane są wysyłane na stronie kodu klienta lub na stronie kodowej implikowanej przez sortowanie. Efekt jest taki sam jak określanie przełącznika -c bez określania pliku formatu. |
SQLNCHAR lub SQLNVARCHAR |
Dane są wysyłane jako Unicode. Efekt jest taki sam jak określanie przełącznika -w bez określania pliku formatu. |
SQLBINARY lub SQLVARYBIN |
Dane są wysyłane bez żadnej konwersji. |
Najlepsze rozwiązania dotyczące trybu znaków (-c) i trybu natywnego (-n)
Ta sekcja zawiera zalecenia dotyczące trybu znaków (-c) i trybu natywnego (-n).
(Administrator/Użytkownik) Jeśli to możliwe, użyj formatu natywnego (
-n), aby uniknąć problemu z separatorem. Użyj formatu natywnego, aby wyeksportować i zaimportować przy użyciu programu SQL Server. Wyeksportuj dane z programu SQL Server przy użyciu-copcji lub-w, jeśli planujesz wyeksportować dane do bazy danych innej niż SQL Server.(Administrator) Zweryfikuj dane podczas używania
bcp out. Jeśli na przykład używasz wartościbcp out,bcp in, a następniebcp outsprawdź, czy dane są prawidłowo eksportowane, a wartości terminatora nie są używane jako część niektórych wartości danych. Rozważ zastąpienie domyślnych terminatorów (przy użyciu opcji-ti-r) na losowe wartości szesnastkowe, aby uniknąć konfliktów między wartościami terminatora a wartościami danych.(Użytkownik) Użyj długiego i unikatowego terminatora (dowolnej sekwencji bajtów lub znaków), aby zminimalizować prawdopodobieństwo konfliktu z rzeczywistą wartością ciągu. Można to zrobić przy użyciu opcji
-ti-r.
Przykłady
Przykłady w tej sekcji korzystają z przykładowej WideWorldImporters bazy danych dla programu SQL Server 2016 (13.x) i nowszych wersji, usługi Azure SQL Database i usługi Azure SQL Managed Instance.
WideWorldImporters można pobrać z witryny https://github.com/Microsoft/sql-server-samples/releases/tag/wide-world-importers-v1.0. Zobacz składnię instrukcji RESTORE dotyczącą przywracania przykładowej bazy danych.
Przykładowe warunki testu
O ile nie określono inaczej, przykłady zakładają, że używasz uwierzytelniania systemu Windows i masz zaufane połączenie z wystąpieniem serwera, w którym uruchamiasz polecenie bcp. Katalog o nazwie D:\bcp jest używany w wielu przykładach. Zastąp <server_name> i innymi wartościami zastępczymi wartościami dla danego środowiska.
Poniższy skrypt Transact-SQL tworzy pustą kopię WideWorldImporters.Warehouse.StockItemTransactions tabeli, a następnie dodaje ograniczenie klucza podstawowego:
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
W razie potrzeby możesz obcinać tabelę StockItemTransactions_bcp :
TRUNCATE TABLE WideWorldImporters.Warehouse.StockItemTransactions_bcp;
Odp. Identyfikowanie wersji narzędzia bcp
W wierszu polecenia wprowadź następujące polecenie:
bcp -v
B. Kopiowanie wierszy tabeli do pliku danych (z zaufanym połączeniem)
Poniższe przykłady ilustrują opcję out na tabeli WideWorldImporters.Warehouse.StockItemTransactions.
Basic
W tym przykładzie tworzony jest plik danych o nazwie
StockItemTransactions_character.bcp, a dane tabeli kopiowane są do niego przy użyciu formatu znakowego.W wierszu polecenia wprowadź następujące polecenie:
bcp WideWorldImporters.Warehouse.StockItemTransactions out D:\bcp\StockItemTransactions_character.bcp -c -TExpanded
W tym przykładzie tworzony jest plik danych o nazwie
StockItemTransactions_native.bcpi kopiuje do niego dane tabeli przy użyciu formatu natywnego . Przykład: określa również maksymalną liczbę błędów składniowych, plik błędu i plik wyjściowy.W wierszu polecenia wprowadź następujące polecenie:
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
Przejrzyj Error_out.log i Output_out.log.
Error_out.log powinna być pusta. Porównaj rozmiary plików między StockItemTransactions_character.bcp i StockItemTransactions_native.bcp.
C. Kopiowanie wierszy tabeli do pliku danych (z uwierzytelnianiem w trybie mieszanym)
Poniższy przykład ilustruje out opcję na WideWorldImporters.Warehouse.StockItemTransactions tabeli. W tym przykładzie tworzony jest plik danych o nazwie StockItemTransactions_character.bcp, a dane tabeli kopiowane są do niego przy użyciu formatu znakowego.
W przykładzie przyjęto założenie, że używasz uwierzytelniania w trybie mieszanym i musisz użyć przełącznika -U w celu określenia identyfikatora logowania. Ponadto, chyba że nawiązujesz połączenie z domyślnym wystąpieniem programu SQL Server na komputerze lokalnym, użyj przełącznika -S , aby określić nazwę systemu i opcjonalnie nazwę wystąpienia.
W wierszu polecenia wprowadź następujące polecenie: (system wyświetla monit o hasło).
bcp WideWorldImporters.Warehouse.StockItemTransactions out D:\bcp\StockItemTransactions_character.bcp -c -U<login_id> -S<server_name\instance_name>
D. Kopiowanie danych z pliku do tabeli
Poniższe przykłady ilustrują opcję in w tabeli WideWorldImporters.Warehouse.StockItemTransactions_bcp z wykorzystaniem wcześniej utworzonych plików.
Basic
W tym przykładzie użyto wcześniej utworzonego
StockItemTransactions_character.bcppliku danych.W wierszu polecenia wprowadź następujące polecenie:
bcp WideWorldImporters.Warehouse.StockItemTransactions_bcp IN D:\bcp\StockItemTransactions_character.bcp -c -TExpanded
W tym przykładzie użyto wcześniej utworzonego
StockItemTransactions_native.bcppliku danych. W przykładzieTABLOCKużyto również wskazówki i określono rozmiar partii, maksymalną liczbę błędów składniowych, plik błędu i plik wyjściowy.W wierszu polecenia wprowadź następujące polecenie:
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> -TPrzejrzyj
Error_in.logiOutput_in.log.
E. Kopiowanie określonej kolumny do pliku danych
Aby skopiować określoną kolumnę, możesz użyć queryout opcji . Poniższy przykład kopiuje tylko kolumnę StockItemTransactionIDWarehouse.StockItemTransactions tabeli do pliku danych.
W wierszu polecenia wprowadź następujące polecenie:
bcp "SELECT StockItemTransactionID FROM WideWorldImporters.Warehouse.StockItemTransactions WITH (NOLOCK)" queryout D:\bcp\StockItemTransactionID_c.bcp -c -T
F. Kopiowanie określonego wiersza do pliku danych
Aby skopiować określony wiersz, możesz użyć queryout opcji . Poniższy przykład kopiuje tylko wiersz osoby o nazwie Amy Trefl z tabeli WideWorldImporters.Application.People do pliku danych Amy_Trefl_c.bcp.
Note
Przełącznik -d służy do identyfikowania bazy danych.
W wierszu polecenia wprowadź następujące polecenie:
bcp "SELECT * from Application.People WHERE FullName = 'Amy Trefl'" queryout D:\bcp\Amy_Trefl_c.bcp -d WideWorldImporters -c -T
G. Kopiowanie danych z zapytania do pliku danych
Aby skopiować zestaw wyników z instrukcji Transact-SQL do pliku danych, użyj queryout opcji . Poniższy przykład kopiuje nazwy z WideWorldImporters.Application.People tabeli uporządkowane według pełnej People.txt nazwy do pliku danych.
Note
Przełącznik -t służy do tworzenia pliku rozdzielanego przecinkami.
W wierszu polecenia wprowadź następujące polecenie:
bcp "SELECT FullName, PreferredName FROM WideWorldImporters.Application.People ORDER BY FullName" queryout D:\bcp\People.txt -t, -c -T
H. Tworzenie plików formatu
Poniższy przykład tworzy trzy różne pliki formatu dla Warehouse.StockItemTransactions tabeli w WideWorldImporters bazie danych. Przejrzyj zawartość każdego utworzonego pliku.
W wierszu polecenia wprowadź następujące polecenia:
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
Przełącznik -x jest obsługiwany tylko w systemie Windows.
Aby uzyskać więcej informacji, zapoznaj się z Plikami w formacie innym niż XML (SQL Server) i Plikami w formacie XML (SQL Server).
I. Użycie pliku formatującego do zbiorczego importowania z użyciem bcp
Aby użyć wcześniej utworzonego pliku formatu podczas importowania danych do wystąpienia programu SQL Server, użyj przełącznika -f wraz z opcją in. Na przykład następujące polecenie zbiorczo kopiuje zawartość pliku danych , StockItemTransactions_character.bcpdo kopii Warehouse.StockItemTransactions_bcp tabeli przy użyciu wcześniej utworzonego pliku StockItemTransactions_c.xmlformatu .
Note
Przełącznik -L służy do importowania tylko pierwszych 100 rekordów.
W wierszu polecenia wprowadź następujące polecenie:
bcp WideWorldImporters.Warehouse.StockItemTransactions_bcp in D:\bcp\StockItemTransactions_character.bcp -L 100 -f D:\bcp\StockItemTransactions_c.xml -T
Note
Pliki formatu są przydatne, gdy pola pliku danych różnią się od kolumn tabeli; na przykład w ich liczbie, kolejności lub typach danych. Aby uzyskać więcej informacji, zobacz Pliki formatu do importu lub eksportu danych (SQL Server).
J. Określanie strony kodowej
Poniższy fragment kodu przedstawia import bcp podczas określania strony kodowej 65001.
bcp MyTable in "D:\data.csv" -T -c -C 65001 -t , ...
K. Przykładowy plik wyjściowy korzystający z pól niestandardowych i terminatorów wierszy
W tym przykładzie przedstawiono dwa przykładowe pliki wygenerowane przez narzędzie bcp przy użyciu pól niestandardowych i terminatorów wierszy.
Utwórz tabelę
dbo.T1wtempdbbazie danych z dwiema kolumnamiIDiName.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'); GOWygeneruj plik wyjściowy z przykładowej tabeli
dbo.T1przy użyciu niestandardowego terminatora pól.W tym przykładzie
-t ,określa terminator pola niestandardowego. Zastąp<server_name>wartością odpowiednią dla twojego środowiska.bcp dbo.T1 out T1.txt -T -S <server_name> -d tempdb -w -t ,Oto zestaw wyników.
1,Natalia 2,Mark 3,RandolphWygeneruj plik wyjściowy z przykładowej tabeli
dbo.T1przy użyciu niestandardowego terminatora pola i niestandardowego terminatora wierszy.W tym przykładzie
-t ,określa terminator pola niestandardowego i-r :określa niestandardowy terminator wierszy. Zastąp<server_name>wartością odpowiednią dla swojego środowiska.bcp dbo.T1 out T1.txt -T -S <server_name> -d tempdb -w -t , -r :Oto zestaw wyników.
1,Natalia:2,Mark:3,Randolph:Note
Znak końca wiersza jest zawsze dodawany, nawet w ostatnim rekordzie. Jednak terminator pola nie jest dodawany do ostatniego pola.
Dodatkowe przykłady
Następujące artykuły zawierają przykłady użycia narzędzia bcp:
Formaty danych dla importu zbiorczego lub eksportu zbiorczego (SQL Server)
- Importowanie lub eksportowanie danych (SQL Server) przy użyciu formatu natywnego
- Importowanie lub eksportowanie danych (SQL Server) przy użyciu formatu znaków
- używanie formatu natywnego Unicode do importowania lub eksportowania danych (SQL Server)
- Importowanie lub eksportowanie danych (SQL Server) przy użyciu formatu znaków Unicode
Zachowaj wartości null lub wartości domyślne podczas importowania zbiorczego (SQL Server)
Zachowaj wartości tożsamości podczas zbiorczego importowania danych (SQL Server)
Formatowanie plików do importowania lub eksportowania danych (SQL Server)
- Tworzenie pliku formatu przy użyciu narzędzia bcp (SQL Server)
- Używanie pliku formatu do zbiorczego importowania danych (SQL Server)
- Użyj pliku formatu, aby pominąć kolumnę tabeli (SQL Server)
- Użyj pliku formatu, aby pominąć pole danych (SQL Server)
- Użyj pliku formatu do mapowania kolumn tabeli na pola pliku danych (SQL Server)
Przykłady zbiorczego importowania i eksportowania dokumentów XML (SQL Server)
Treści powiązane
- Przygotowywanie danych do eksportu zbiorczego lub importowania
- MASOWE WSTAWIANIE (Transact-SQL)
- OPENROWSET (Transact-SQL)
- SET QUOTED_IDENTIFIER (Transact-SQL)
- sp_configure (Transact-SQL)
- sp_tableoption (Transact-SQL)
- Formatowanie plików do importowania lub eksportowania danych (SQL Server)
Uzyskiwanie pomocy
- Pomysły na język SQL: masz sugestie dotyczące ulepszania programu SQL Server?
- Microsoft Q & A (SQL Server)
- DBA Stack Exchange (tag sql-server): Zadaj pytania na temat SQL Server
- Stack Overflow (tag sql-server): Odpowiedzi na pytania dotyczące programowania SQL
- Postanowienia licencyjne i informacje dotyczące programu Microsoft SQL Server
- Opcje pomocy technicznej dla użytkowników biznesowych
- Dodatkowa pomoc i informacje zwrotne dotyczące programu SQL Server
Współtworzenie dokumentacji SQL
Czy wiesz, że możesz samodzielnie edytować zawartość SQL? Jeśli to zrobisz, nie tylko pomożesz ulepszyć naszą dokumentację, ale także zostaniesz uznany za współautora strony.
Aby uzyskać więcej informacji, zobacz Edytowanie dokumentacji środowiska Microsoft Learn.