Uwaga
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.
Dotyczy:SQL Server
Azure SQL Database
Azure SQL Managed Instance
Azure Synapse Analytics
Analytics Platform System (PDW)
Plik danych może zawierać pola ułożone w innej kolejności niż odpowiednie kolumny w tabeli. W tym artykule przedstawiono zarówno pliki formatu innego niż XML, jak i XML, które są modyfikowane w celu uwzględnienia pliku danych, którego pola są rozmieszczone w innej kolejności niż kolumny tabeli. Zmodyfikowany plik formatu mapuje pola danych na odpowiadające im kolumny tabeli. Aby uzyskać dodatkowe informacje, przejrzyj Create a format file with bcp (SQL Server) (Tworzenie pliku formatu przy użyciu programu bcp (SQL Server).
Plik formatu innego niż XML lub XML może służyć do zbiorczego importowania pliku danych do tabeli przy użyciu narzędzia bcp polecenia BULK INSERT instrukcji lub INSERT ... SELECT * FROM INSTRUKCJI OPENROWSET. Aby uzyskać więcej informacji, zobacz Używanie pliku formatu do zbiorczego importowania danych (SQL Server).
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.
Przykładowe warunki testu
Przykłady zmodyfikowanych plików formatu w tym artykule są oparte na tabeli i pliku danych zdefiniowanym w dalszej części tego artykułu.
Przykładowa tabela
Poniższy skrypt Transact-SQL tworzy testową bazę danych i tabelę o nazwie myRemap
.
CREATE DATABASE TestDatabase;
GO
USE TestDatabase;
CREATE TABLE myRemap
(
PersonID SMALLINT,
FirstName VARCHAR (25),
LastName VARCHAR (30),
Gender CHAR (1)
);
Przykładowy plik danych
Poniższe dane przedstawiają FirstName
i LastName
w odwrotnej kolejności, jak pokazano w tabeli myRemap
. Za pomocą edytora tekstów, takiego jak Notatnik, utwórz pusty plik D:\BCP\myRemap.bcp
i wstaw następujące dane:
1,Grosse,Anthony,M
2,Fatnowna,Alica,F
3,Rosenhain,Stella,F
Tworzenie plików formatu
Aby zbiorczo zaimportować dane z myRemap.bcp
do tabeli myRemap
, plik formatu musi wykonać następujące czynności:
- Przypisz pierwsze pole danych do pierwszej kolumny,
PersonID
. - Przypisz drugie pole danych do trzeciej kolumny,
LastName
. - Przypisz trzecią kolumnę danych do drugiej kolumny,
FirstName
. - Przypisz czwarte pole danych do czwartej kolumny,
Gender
.
Najprostszą metodą utworzenia pliku formatu jest użycie narzędzia bcp. Najpierw utwórz plik formatu podstawowego z istniejącej tabeli. Po drugie zmodyfikuj plik formatu podstawowego, aby odzwierciedlał rzeczywisty plik danych.
Tworzenie pliku w formacie innego niż XML
Aby uzyskać szczegółowe informacje, zapoznaj się z Użyj plików w formacie non-XML (SQL Server). Następujące polecenie używa narzędzia bcp do generowania pliku formatu innego niż XML, myRemap.fmt
, na podstawie schematu myRemap
. Ponadto kwalifikator c
służy do określania danych znaków, t,
służy do określania przecinka jako terminatora pola, a T
służy do określania zaufanego połączenia przy użyciu zintegrowanych zabezpieczeń. W wierszu polecenia wprowadź następujące polecenie:
bcp TestDatabase.dbo.myRemap format nul -c -f D:\BCP\myRemap.fmt -t, -T
Modyfikowanie pliku formatu innego niż XML
Aby uzyskać informacje na temat terminologii, zobacz Struktura plików formatu innego niż XML. Otwórz D:\BCP\myRemap.fmt
w Notatniku i wykonaj następujące modyfikacje:
- Zmień kolejność wierszy pliku formatu, tak aby wiersze znajdują się w tej samej kolejności co dane w
myRemap.bcp
. - Upewnij się, że wartości kolejności pól pliku hosta są sekwencyjne.
- Upewnij się, że po ostatnim wierszu pliku jest znak powrotu karetki.
Porównaj zmiany:
przed
13.0
4
1 SQLCHAR 0 7 "," 1 PersonID ""
2 SQLCHAR 0 25 "," 2 FirstName SQL_Latin1_General_CP1_CI_AS
3 SQLCHAR 0 30 "," 3 LastName SQL_Latin1_General_CP1_CI_AS
4 SQLCHAR 0 1 "\r\n" 4 Gender SQL_Latin1_General_CP1_CI_AS
po
13.0
4
1 SQLCHAR 0 7 "," 1 PersonID ""
2 SQLCHAR 0 30 "," 3 LastName SQL_Latin1_General_CP1_CI_AS
3 SQLCHAR 0 25 "," 2 FirstName SQL_Latin1_General_CP1_CI_AS
4 SQLCHAR 0 1 "\r\n" 4 Gender SQL_Latin1_General_CP1_CI_AS
Zmodyfikowany plik formatu odzwierciedla teraz:
- Pierwsze pole danych w
myRemap.bcp
jest mapowane na pierwszą kolumnę,myRemap.. PersonID
- Drugie pole danych w
myRemap.bcp
jest przypisane do trzeciej kolumny,myRemap.. LastName
- Trzecie pole danych w
myRemap.bcp
jest mapowane na drugą kolumnę,myRemap.. FirstName
- Czwarte pole danych w
myRemap.bcp
odpowiada czwartej kolumnie,myRemap.. Gender
Tworzenie pliku formatu XML
Przejrzyj pliki formatu XML (SQL Server), aby uzyskać szczegółowe informacje. Następujące polecenie używa narzędzia bcp do utworzenia pliku formatu XML, myRemap.xml
, na podstawie schematu myRemap
. Ponadto kwalifikator c
służy do określania danych znaków, t,
służy do określania przecinka jako terminatora pola, a T
służy do określania zaufanego połączenia przy użyciu zintegrowanych zabezpieczeń. Kwalifikator x
musi służyć do generowania pliku formatu opartego na formacie XML. W wierszu polecenia wprowadź następujące polecenie:
bcp TestDatabase.dbo.myRemap format nul -c -x -f D:\BCP\myRemap.xml -t, -T
Modyfikowanie pliku formatu XML
Zapoznaj się z składnią schematu formatu XML dla plików pod kątem terminologii. Otwórz D:\BCP\myRemap.xml
w Notatniku i wykonaj następujące modyfikacje:
Kolejność, w jakiej elementy
<FIELD>
są deklarowane w pliku formatu, to kolejność, w jakiej te pola są wyświetlane w pliku danych. W związku z tym należy odwrócić kolejność elementów<FIELD>
z identyfikatorami 2 i 3.Upewnij się, że wartości atrybutów identyfikatora
<FIELD>
są sekwencyjne.Kolejność elementów
<COLUMN>
w elemencie wiersza <> określa kolejność, w jakiej operacja zbiorcza wysyła je do obiektu docelowego. Plik formatu XML przypisuje każdemu elementowi<COLUMN>
nazwę lokalną, która nie ma relacji z kolumną w tabeli docelowej operacji importowania zbiorczego. Kolejność elementów<COLUMN>
jest niezależna od kolejności elementów<FIELD>
w definicji <RECORD>. Każdy element<COLUMN>
odpowiada elementowi<FIELD>
(którego identyfikator jest określony w atrybucie SOURCE elementu<COLUMN>
). W związku z tym wartości<COLUMN>
SOURCE są jedynymi atrybutami, które wymagają poprawki. Odwróć kolejność atrybutów<COLUMN>
SOURCE 2 i 3.
Porównaj zmiany:
przed
<?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="25" COLLATION="SQL_Latin1_General_CP1_CI_AS"/>
<FIELD ID="3" xsi:type="CharTerm" TERMINATOR="," MAX_LENGTH="30" COLLATION="SQL_Latin1_General_CP1_CI_AS"/>
<FIELD ID="4" xsi:type="CharTerm" TERMINATOR="\r\n" MAX_LENGTH="1" COLLATION="SQL_Latin1_General_CP1_CI_AS"/>
</RECORD>
<ROW>
<COLUMN SOURCE="1" NAME="PersonID" xsi:type="SQLSMALLINT"/>
<COLUMN SOURCE="2" NAME="FirstName" xsi:type="SQLVARYCHAR"/>
<COLUMN SOURCE="3" NAME="LastName" xsi:type="SQLVARYCHAR"/>
<COLUMN SOURCE="4" NAME="Gender" xsi:type="SQLCHAR"/>
</ROW>
</BCPFORMAT>
po
<?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="30" COLLATION="SQL_Latin1_General_CP1_CI_AS"/>
<FIELD ID="3" xsi:type="CharTerm" TERMINATOR="," MAX_LENGTH="25" COLLATION="SQL_Latin1_General_CP1_CI_AS"/>
<FIELD ID="4" xsi:type="CharTerm" TERMINATOR="\r\n" MAX_LENGTH="1" COLLATION="SQL_Latin1_General_CP1_CI_AS"/>
</RECORD>
<ROW>
<COLUMN SOURCE="1" NAME="PersonID" xsi:type="SQLSMALLINT"/>
<COLUMN SOURCE="3" NAME="FirstName" xsi:type="SQLVARYCHAR"/>
<COLUMN SOURCE="2" NAME="LastName" xsi:type="SQLVARYCHAR"/>
<COLUMN SOURCE="4" NAME="Gender" xsi:type="SQLCHAR"/>
</ROW>
</BCPFORMAT>
Zmodyfikowany plik formatu odzwierciedla teraz:
- POLE 1, które odpowiada kolumnie KOLUMNA 1, jest odwzorowane na pierwszą kolumnę tabeli,
myRemap.. PersonID
- POLE 2, które odpowiada kolumnie COLUMN 2, jest ponownie mapowane na trzecią kolumnę tabeli,
myRemap.. LastName
- POLE 3, które odpowiada kolumnie 3, jest przypisane do drugiej kolumny tabeli,
myRemap.. FirstName
- POLE 4, które odpowiada KOLUMNA 4, jest przypisane do czwartej kolumny tabeli,
myRemap.. Gender
Importowanie danych za pomocą pliku formatu, aby mapować kolumny tabeli na pola pliku danych.
W poniższych przykładach używane są plik bazy danych, plik danych i plik formatu utworzone wcześniej.
Użyj pliku formatu bcp i formatu innego niż XML
W wierszu polecenia wprowadź następujące polecenie.
bcp TestDatabase.dbo.myRemap IN D:\BCP\myRemap.bcp -f D:\BCP\myRemap.fmt -T
Używanie pliku formatu bcp i XML
W wierszu polecenia wprowadź następujące polecenie.
bcp TestDatabase.dbo.myRemap IN D:\BCP\myRemap.bcp -f D:\BCP\myRemap.xml -T
Użyj BULK INSERT i pliku w formacie innym niż XML
Uruchom następujący skrypt Transact-SQL.
USE TestDatabase;
GO
TRUNCATE TABLE myRemap;
BULK INSERT dbo.myRemap FROM 'D:\BCP\myRemap.bcp'
WITH (FORMATFILE = 'D:\BCP\myRemap.fmt');
GO
-- review results
SELECT *
FROM TestDatabase.dbo.myRemap;
Użyj BULK INSERT i pliku w formacie XML
Uruchom następujący skrypt Transact-SQL.
USE TestDatabase;
GO
TRUNCATE TABLE myRemap;
BULK INSERT dbo.myRemap FROM 'D:\BCP\myRemap.bcp'
WITH (FORMATFILE = 'D:\BCP\myRemap.xml');
GO
-- review results
SELECT *
FROM TestDatabase.dbo.myRemap;
Użycie OPENROWSET i pliku w formacie innym niż XML
Uruchom skrypt Transact-SQL, który jest następujący.
USE TestDatabase;
GO
TRUNCATE TABLE myRemap;
INSERT INTO dbo.myRemap
SELECT *
FROM OPENROWSET (
BULK 'D:\BCP\myRemap.bcp',
FORMATFILE = 'D:\BCP\myRemap.fmt'
) AS t1;
GO
-- review results
SELECT *
FROM TestDatabase.dbo.myRemap;
Używanie pliku w formacie OPENROWSET i XML
Uruchom następujący skrypt Transact-SQL.
USE TestDatabase;
GO
TRUNCATE TABLE myRemap;
INSERT INTO dbo.myRemap
SELECT *
FROM OPENROWSET (
BULK 'D:\BCP\myRemap.bcp',
FORMATFILE = 'D:\BCP\myRemap.xml'
) AS t1;
GO
-- review results
SELECT *
FROM TestDatabase.dbo.myRemap;