Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz 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ć więcej pól niż liczba kolumn w tabeli. W tym artykule opisano modyfikowanie plików formatu innego niż XML i XML w celu dostosowania pliku danych do większej liczby pól przez mapowanie kolumn tabeli na odpowiednie pola danych i ignorowanie dodatkowych pól.
Aby uzyskać więcej informacji, zobacz Tworzenie pliku formatu za pomocą narzędzia bcp (SQL Server).
Notatka
Plik w formacie XML lub innym niż XML może zostać użyty do zbiorczego importowania pliku danych do tabeli przy użyciu polecenia narzędzia bcp, instrukcji BULK INSERT (Transact-SQL) lub instrukcji INSERT ... SELECT * FROM OPENROWSET BULK (Transact-SQL). 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 integracjach platform baz danych w chmurze realizuj przenoszenie danych za pomocą instrukcji COPY w usłudze Azure Data Factorylub przy użyciu 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 przykładowej tabeli myTestSkipField i pliku D:\BCP\myTestSkipField.bcpdanych . Zmień lokalizację pliku lokalnego w przykładzie kodu na lokalizację pliku na maszynie.
Przykładowa tabela
Skrypt tworzy testową bazę danych i tabelę o nazwie myTestSkipField. Wykonaj polecenie Transact-SQL w programie Microsoft SQL Server Management Studio (SSMS):
CREATE DATABASE TestDatabase;
GO
USE TestDatabase;
CREATE TABLE myTestSkipField
(
PersonID smallint,
FirstName varchar(25),
LastName varchar(30)
);
Przykładowy plik danych
Utwórz pusty plik D:\BCP\myTestSkipField.bcp i wstaw następujące dane:
1,SkipMe,Anthony,Grosse
2,SkipMe,Alica,Fatnowna
3,SkipMe,Stella,Rosenhain
Tworzenie plików formatu
Aby zbiorczo zaimportować dane z myTestSkipField.bcp do tabeli myTestSkipField, plik formatu musi wykonać następujące czynności:
- Dopasuj pierwsze pole danych do pierwszej kolumny,
PersonID. - Pomiń drugie pole danych.
- Przypisz trzecie pole danych do drugiej kolumny,
FirstName. - Przypisz czwartą wartość danych do trzeciej kolumny,
LastName.
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żyje narzędzia bcp do wygenerowania pliku formatu innego niż xml, myTestSkipField.fmt, na podstawie schematu myTestSkipField. 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.myTestSkipField format nul -c -f D:\BCP\myTestSkipField.fmt -t, -T
Modyfikowanie pliku formatu innego niż XML
Zapoznaj się z struktury plików w formacie innego niż XML terminologii. Otwórz D:\BCP\myTestSkipField.fmt w Notatniku i wykonaj następujące modyfikacje:
- Skopiuj cały wiersz pliku formatu dla
FirstNamei wklej go bezpośrednio poFirstNamew następnym wierszu. - Zwiększ wartość kolejności pola pliku hosta o jeden dla nowego wiersza i wszystkich kolejnych wierszy.
- Zwiększ liczbę kolumn, aby odzwierciedlić rzeczywistą liczbę pól w pliku danych.
- Zmodyfikuj kolejność kolumn serwera z
2do0dla drugiego wiersza pliku formatu.
Porównaj wprowadzone zmiany:
przed
13.0
3
1 SQLCHAR 0 7 "," 1 PersonID ""
2 SQLCHAR 0 25 "," 2 FirstName SQL_Latin1_General_CP1_CI_AS
3 SQLCHAR 0 30 "\r\n" 3 LastName SQL_Latin1_General_CP1_CI_AS
po
13.0
4
1 SQLCHAR 0 7 "," 1 PersonID ""
2 SQLCHAR 0 25 "," 0 FirstName SQL_Latin1_General_CP1_CI_AS
3 SQLCHAR 0 25 "," 2 FirstName SQL_Latin1_General_CP1_CI_AS
4 SQLCHAR 0 50 "\r\n" 3 LastName SQL_Latin1_General_CP1_CI_AS
Zmodyfikowany plik formatu odzwierciedla teraz:
- 4 pola danych
- Pierwsze pole danych w
myTestSkipField.bcpjest mapowane na pierwszą kolumnę,myTestSkipField.. PersonID - Drugie pole danych w
myTestSkipField.bcpnie jest mapowane na żadną kolumnę. - Trzecie pole danych w
myTestSkipField.bcpjest mapowane na drugą kolumnę,myTestSkipField.. FirstName - Czwarte pole danych w
myTestSkipField.bcpjest przypisane do trzeciej kolumnymyTestSkipField.. LastName.
Tworzenie pliku formatu XML
Przejrzyj pliki formatu XML (SQL Server), aby uzyskać szczegółowe informacje. Następujące polecenie użyje narzędzia bcp do utworzenia pliku formatu XML, myTestSkipField.xml, na podstawie schematu myTestSkipField.
- Kwalifikator
csłuży do określania danych znaków -
t,służy do określania przecinka jako terminatora pola -
Tsłuży do określania zaufanego połączenia przy użyciu zintegrowanych zabezpieczeń. - Kwalifikator
xmusi służyć do generowania pliku formatu opartego na formacie XML.
W wierszu polecenia wprowadź następujące polecenie:
bcp TestDatabase.dbo.myTestSkipField format nul -c -x -f D:\BCP\myTestSkipField.xml -t, -T
Modyfikowanie pliku formatu XML
Przejrzyj składnię schematu dla plików w formacie XML pod kątem terminologii. Otwórz D:\BCP\myTestSkipField.xml w Notatniku i wykonaj następujące modyfikacje:
- Skopiuj całe drugie pole i wklej je bezpośrednio po drugim polu w następnym wierszu.
- Zwiększ wartość
FIELD IDo 1 dla nowegoFIELDi każdej kolejnejFIELD. - Zwiększ wartość
COLUMN SOURCEo 1 dlaFirstNameelementu iLastName, by odzwierciedlić poprawione mapowanie.
Porównaj wprowadzone 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="\r\n" MAX_LENGTH="30" 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"/>
</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="25" 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="30" 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="4" NAME="LastName" xsi:type="SQLVARYCHAR"/>
</ROW>
</BCPFORMAT>
Zmodyfikowany plik formatu odzwierciedla teraz:
- 4 pola danych
-
FIELD1 jako odpowiednikCOLUMN1 jest przypisane do pierwszej kolumny tabeli,myTestSkipField.. PersonID -
FIELD2 nie odpowiada żadnemuCOLUMN, dlatego nie jest mapowany na żadną kolumnę tabeli. -
FIELD3, które odpowiadaCOLUMN3, jest mapowane na drugą kolumnę tabeli,myTestSkipField.. FirstName -
FIELD4 odpowiadająceCOLUMN4 jest przyporządkowane trzeciej kolumnie tabeli,myTestSkipField.. LastName
Importowanie danych za pomocą pliku formatu w celu pominięcia pola danych
W przykładach użyto przykładowej bazy danych, pliku danych i plików formatu utworzonych w tym artykule.
Użyj oraz pliku w formacie innym niż XML
W wierszu polecenia wprowadź następujące polecenie:
bcp TestDatabase.dbo.myTestSkipField IN D:\BCP\myTestSkipField.bcp -f D:\BCP\myTestSkipField.fmt -T
Używanie plików formatu bcp i XML (SQL Server)
W wierszu polecenia wprowadź następujące polecenie:
bcp TestDatabase.dbo.myTestSkipField IN D:\BCP\myTestSkipField.bcp -f D:\BCP\myTestSkipField.xml -T
Używanie funkcji BULK INSERT (Transact-SQL) i pliku formatu innego niż XML
Wykonaj polecenie Transact-SQL w programie Microsoft SQL Server Management Studio (SSMS):
USE TestDatabase;
GO
TRUNCATE TABLE myTestSkipField;
BULK INSERT dbo.myTestSkipField
FROM 'D:\BCP\myTestSkipField.bcp'
WITH (FORMATFILE = 'D:\BCP\myTestSkipField.fmt');
GO
-- review results
SELECT * FROM TestDatabase.dbo.myTestSkipField;
Używanie funkcji BULK INSERT (Transact-SQL) i plików formatu XML (SQL Server)
Wykonaj polecenie Transact-SQL w programie Microsoft SQL Server Management Studio (SSMS):
USE TestDatabase;
GO
TRUNCATE TABLE myTestSkipField;
BULK INSERT dbo.myTestSkipField
FROM 'D:\BCP\myTestSkipField.bcp'
WITH (FORMATFILE = 'D:\BCP\myTestSkipField.xml');
GO
-- review results
SELECT * FROM TestDatabase.dbo.myTestSkipField;
Używanie pliku BULK OPENROWSET (Transact-SQL) i pliku formatu innego niż XML
Wykonaj polecenie Transact-SQL w programie Microsoft SQL Server Management Studio (SSMS):
USE TestDatabase;
GO
TRUNCATE TABLE myTestSkipField;
INSERT INTO dbo.myTestSkipField
SELECT *
FROM OPENROWSET (
BULK 'D:\BCP\myTestSkipField.bcp',
FORMATFILE = 'D:\BCP\myTestSkipField.fmt'
) AS t1;
GO
-- review results
SELECT * FROM TestDatabase.dbo.myTestSkipField;
Użyj OPENROWSET BULK (Transact-SQL) i plików formatu XML (SQL Server)
Wykonaj polecenie Transact-SQL w programie Microsoft SQL Server Management Studio (SSMS):
USE TestDatabase;
GO
TRUNCATE TABLE myTestSkipField;
INSERT INTO dbo.myTestSkipField
SELECT *
FROM OPENROWSET (
BULK 'D:\BCP\myTestSkipField.bcp',
FORMATFILE = 'D:\BCP\myTestSkipField.xml'
) AS t1;
GO
-- review results
SELECT * FROM TestDatabase.dbo.myTestSkipField;