Tworzenie pliku formatu za pomocą narzędzia bcp (SQL Server)

Dotyczy:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsAnalytics Platform System (PDW)

W tym artykule opisano sposób użycia narzędzia bcp do utworzenia pliku formatu dla określonej tabeli. Plik formatu jest oparty na określonej opcji typu danych (-n, -c, -wlub -N) oraz ograniczników tabeli lub widoku.

Podczas zbiorczego importowania do tabeli programu SQL Server lub zbiorczego eksportowania danych z tabeli można użyć pliku formatu jako elastycznego systemu do zapisywania plików danych. Pliki formatu wymagają niewielkiej lub żadnej edycji w celu zachowania zgodności z innymi formatami danych lub odczytu plików danych z innych programów programowych.

Ograniczenia

Wersja narzędzia (bcp.exe) używanego bcp do odczytu pliku formatowego musi być taka sama lub późniejsza niż wersja użyta do utworzenia pliku formatowego. Na przykład SQL Server 2025 (17.x) bcp może odczytać plik w formacie wersji 16.0, który jest generowany przez SQL Server 2022 (16.x), bcpnatomiast SQL Server 2022 (16.x) bcp nie potrafi odczytać pliku w formacie 17.0, który jest generowany przez SQL Server 2025 (17.x). bcp

Notatka

Ta składnia, w tym wstawianie zbiorcze, nie jest obsługiwana w usłudze Azure Synapse Analytics. W usłudze Azure Synapse Analytics i innych integracji platformy bazy danych w chmurze wykonaj przenoszenie danych za pośrednictwem instrukcji COPY w usłudze Azure Data Factorylub za pomocą instrukcji języka T-SQL , takich jak COPY INTO i PolyBase.

Tworzenie plików formatu

SQL Server obsługuje dwa typy plików formatowych: format nie-XML oraz format XML. Format inny niż XML jest oryginalnym formatem obsługiwanym przez wcześniejsze wersje programu SQL Server.

Ogólnie rzecz biorąc, pliki w formacie XML i inne niż XML są zamienne. Zalecamy jednak używanie składni XML do formatowania plików, ponieważ zapewniają one kilka zalet w porównaniu z plikami formatu innego niż XML.

Przykłady kodu w tym artykule korzystają z przykładowej bazy danych AdventureWorks2025 lub AdventureWorksDW2025, którą można pobrać ze strony głównej Przykładów programu Microsoft SQL Server i projektów społeczności. Adventure Works Cycles to fikcyjna firma produkcyjna, która demonstruje pojęcia i scenariusze bazy danych.

Utwórz plik formatowy

Aby użyć bcp do utworzenia pliku formatu, określ argument format i użyj nul zamiast ścieżki do pliku danych. Opcja format zawsze wymaga opcji -f.

Aby utworzyć plik formatu XML, należy określić opcję -x, na przykład bcp <table_or_view> format nul -f <format_file_name> -x.

Aby odróżnić plik w formacie XML, użyj .xml jako rozszerzenia nazwy pliku, na przykład . MyTable.xml

Informacje o strukturze i polach plików w formacie XML można znaleźć w artykule pliki w formacie XML.

Przykłady

Ta sekcja zawiera przykłady pokazujące, jak użyć bcp do stworzenia pliku formatowego. Tabela HumanResources.Department zawiera cztery kolumny: DepartmentID, Name, GroupNamei ModifiedDate.

A. Stwórz plik formatowy dla danych znaków

Poniższy przykład tworzy plik formatowany dla tabeli HumanResources.Department przy użyciu formatów danych znaków.

Utwórz plik w formacie XML o nazwie Department-c.xml. Plik formatu używa niestandardowego terminatora pola (,). Poniższa sekcja przedstawia zawartość wygenerowanego pliku formatowego.

Polecenie bcp zawiera następujące kwalifikatory.

Kwalifikatory Opis
format nul -x -f <format_file> Określa plik formatu XML.
-c Określa dane znaków.
-t, Określa przecinek (,) jako terminator pola.

Uwaga: Jeśli plik danych używa domyślnego terminatora pola (\t), przełącznik -t jest niepotrzebny.
-T Określa, że łączy bcp się z SQL Server za pomocą zaufanego połączenia z wykorzystaniem zintegrowanych zabezpieczeń. Jeśli nie określisz -T, musisz określić -U i -P aby zalogować się pomyślnie.

W wierszu polecenia systemu Windows wprowadź następujące polecenie bcp:

bcp AdventureWorks2025.HumanResources.Department format nul -c -x -f Department-c.xml -t, -T

Wygenerowany plik formatu Department-c.xmlzawiera następujące elementy XML:

<?xml version="1.0"?>
<BCPFORMAT xmlns="http://schemas.microsoft.com/sqlserver/2004/bulkload/format" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<RECORD>
  <FIELD ID="1" xsi:type="CharTerm" TERMINATOR="," MAX_LENGTH="7"/>
  <FIELD ID="2" xsi:type="CharTerm" TERMINATOR="," MAX_LENGTH="100" COLLATION="SQL_Latin1_General_CP1_CI_AS"/>
  <FIELD ID="3" xsi:type="CharTerm" TERMINATOR="," MAX_LENGTH="100" COLLATION="SQL_Latin1_General_CP1_CI_AS"/>
  <FIELD ID="4" xsi:type="CharTerm" TERMINATOR="\r\n" MAX_LENGTH="24"/>
</RECORD>
<ROW>
  <COLUMN SOURCE="1" NAME="DepartmentID" xsi:type="SQLSMALLINT"/>
  <COLUMN SOURCE="2" NAME="Name" xsi:type="SQLNVARCHAR"/>
  <COLUMN SOURCE="3" NAME="GroupName" xsi:type="SQLNVARCHAR"/>
  <COLUMN SOURCE="4" NAME="ModifiedDate" xsi:type="SQLDATETIME"/>
</ROW>
</BCPFORMAT>

Aby uzyskać informacje o składni tego pliku formatu, zobacz pliki formatu XML. Informacje o danych znaków można znaleźć w artykule Użyj formatu znaków do importu lub eksportu danych.

B. Stwórz plik formatowany dla natywnych danych

Poniższy przykład tworzy plik formatowany dla tabeli HumanResources.Department przy użyciu natywnych typów danych.

Utwórz plik w formacie XML o nazwie Department-n.xml. Poniższa sekcja przedstawia zawartość wygenerowanego pliku formatowego.

Polecenie bcp zawiera następujące kwalifikatory.

Kwalifikatory Opis
format nul -x -f <format_file> Określa plik formatu XML.
-n Określa natywne typy danych.
-T Określa, że łączy bcp się z SQL Server za pomocą zaufanego połączenia z wykorzystaniem zintegrowanych zabezpieczeń. Jeśli nie określisz -T, musisz określić -U i -P aby zalogować się pomyślnie.

W wierszu polecenia systemu Windows wprowadź następujące polecenie bcp:

bcp AdventureWorks2025.HumanResources.Department format nul -x -f Department-n.xml -n -T

Wygenerowany plik formatu Department-n.xmlzawiera następujące elementy XML:

<?xml version="1.0"?>
<BCPFORMAT xmlns="http://schemas.microsoft.com/sqlserver/2004/bulkload/format" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<RECORD>
  <FIELD ID="1" xsi:type="NativeFixed" LENGTH="2"/>
  <FIELD ID="2" xsi:type="NCharPrefix" PREFIX_LENGTH="2" MAX_LENGTH="100" COLLATION="SQL_Latin1_General_CP1_CI_AS"/>
  <FIELD ID="3" xsi:type="NCharPrefix" PREFIX_LENGTH="2" MAX_LENGTH="100" COLLATION="SQL_Latin1_General_CP1_CI_AS"/>
  <FIELD ID="4" xsi:type="NativeFixed" LENGTH="8"/>
</RECORD>
<ROW>
  <COLUMN SOURCE="1" NAME="DepartmentID" xsi:type="SQLSMALLINT"/>
  <COLUMN SOURCE="2" NAME="Name" xsi:type="SQLNVARCHAR"/>
  <COLUMN SOURCE="3" NAME="GroupName" xsi:type="SQLNVARCHAR"/>
  <COLUMN SOURCE="4" NAME="ModifiedDate" xsi:type="SQLDATETIME"/>
</ROW>
</BCPFORMAT>

Aby uzyskać informacje o składni tego pliku formatu, zobacz pliki formatu XML. Aby uzyskać informacje o tym, jak korzystać z natywnych danych, zobacz: Użyj formatu natywnego do importu lub eksportu danych.

C. Tworzenie pliku formatu innego niż XML dla danych natywnych Unicode

Aby utworzyć plik formatu innego niż XML dla danych natywnych Unicode dla tabeli HumanResources.Department, użyj następującego polecenia:

bcp AdventureWorks2025.HumanResources.Department format nul -T -N -f Department-n.fmt

Aby uzyskać więcej informacji o tym, jak korzystać z natywnych danych Unicode, zobacz Użyj natywnego formatu Unicode do importu lub eksportu danych.

D. Tworzenie pliku formatu innego niż XML dla danych znaków Unicode

Aby utworzyć plik formatu innego niż XML dla danych znaków Unicode dla tabeli HumanResources.Department, która używa domyślnych terminatorów, użyj następującego polecenia:

bcp AdventureWorks2025.HumanResources.Department format nul -T -w -f Department-w.fmt

Aby uzyskać więcej informacji o tym, jak korzystać z danych znaków Unicode, zobacz Użyj formatu znaków Unicode do importu lub eksportu danych.

E. Użyj pliku formatu z opcją strony kodowej

Gdy tworzysz plik formatowy używając bcp format, zapisuje on informacje o sortacji i stronie kodowej do pliku formatowego.

Poniższy przykładowy plik formatu dla tabeli z pięcioma kolumnami zawiera sortowanie.

13.0
5
1  SQLCHAR         0       0       "\t"             1     c_0          Cyrillic_General_CS_AS
2  SQLCHAR         0       0       "\t"             2     c_1          Cyrillic_General_CS_AS
3  SQLCHAR         0       3000    "\t"             3     c_2          Cyrillic_General_CS_AS
4  SQLCHAR         0       5       "\t"             4     c_3          ""
5  SQLCHAR         0       41      "!!!\r\r\n"      5     c_4          ""

Jeśli próbujesz zaimportować dane do programu SQL Server przy użyciu bcp in -c -C65001 -f format_file ... albo za pomocą OPENROWSET lub BULK INSERT z użyciem FORMATFILE='format_file' CODEPAGE=65001 ..., informacje o sortowaniu lub stronie kodowej w pliku formatu mają pierwszeństwo przed opcją 65001.

Dlatego jeśli generujesz plik formatowy, musisz ręcznie usunąć informacje o sortowaniu z wygenerowanego pliku formatowego przed rozpoczęciem importu danych z powrotem do SQL Server.

Poniższy przykład pokazuje plik formatowany bez informacji o sortowaniu.

13.0
5
1  SQLCHAR         0       0       "\t"             1     c_0              ""
2  SQLCHAR         0       0       "\t"             2     c_1              ""
3  SQLCHAR         0       3000    "\t"             3     c_2              ""
4  SQLCHAR         0       5       "\t"             4     c_3              ""
5  SQLCHAR         0       41      "!!!\r\r\n"      5     c_4              ""

Mapuj pola danych do kolumn tabeli

Plik formatu utworzony przez bcp opisuje wszystkie kolumny tabeli w kolejności. Możesz modyfikować plik formatowy, aby przestawiać lub pomijać kolumny tabeli. Plik formatu można dostosować do pliku danych, którego pola nie są mapowanie bezpośrednio do kolumn tabeli. Aby uzyskać więcej informacji, zobacz następujące artykuły: