Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
van toepassing op:SQL Server
Azure SQL Database
Azure SQL Managed Instance
Azure Synapse Analytics
Analytics Platform System (PDW)
Een gegevensbestand kan velden bevatten die in een andere volgorde zijn gerangschikt dan de bijbehorende kolommen in de tabel. In dit artikel worden bestanden met niet-XML- en XML-indelingen weergegeven die zijn aangepast voor een gegevensbestand waarvan de velden in een andere volgorde zijn gerangschikt dan de tabelkolommen. Het gewijzigde indelingsbestand wijst de gegevensvelden toe aan de bijbehorende tabelkolommen. Bekijk Een indelingsbestand maken met bcp (SQL Server) voor meer informatie.
Een niet-XML- of XML-indelingsbestand kan worden gebruikt om een gegevensbestand bulksgewijs in de tabel te importeren met behulp van een bcp-hulpprogramma opdracht, BULK INSERT instructie, of INSERT ... SELECT * FROM OPENROWSET instructie. Zie Een indelingsbestand gebruiken om gegevens (SQL Server) bulksgewijs te importerenvoor meer informatie.
Notitie
Deze syntaxis, inclusief bulksgewijs invoegen, wordt niet ondersteund in Azure Synapse Analytics. In Azure Synapse Analytics en andere integraties van het clouddatabaseplatform kunt u gegevensverplaatsing uitvoeren via de COPY-instructie in Azure Data Factoryof met behulp van T-SQL-instructies zoals COPY INTO en PolyBase.
Voorbeeldtestvoorwaarden
De voorbeelden van gewijzigde indelingsbestanden in dit artikel zijn gebaseerd op de tabel en het gegevensbestand die verderop in dit artikel zijn gedefinieerd.
Voorbeeldtabel
Met het volgende Transact-SQL script maakt u een testdatabase en een tabel met de naam myRemap
.
CREATE DATABASE TestDatabase;
GO
USE TestDatabase;
CREATE TABLE myRemap
(
PersonID SMALLINT,
FirstName VARCHAR (25),
LastName VARCHAR (30),
Gender CHAR (1)
);
Voorbeeldgegevensbestand
De volgende gegevens bevatten FirstName
en LastName
in de omgekeerde volgorde, zoals weergegeven in de tabel myRemap
. Maak met behulp van een teksteditor zoals Kladblok een leeg bestand D:\BCP\myRemap.bcp
en voeg de volgende gegevens in:
1,Grosse,Anthony,M
2,Fatnowna,Alica,F
3,Rosenhain,Stella,F
De indelingsbestanden maken
Als u gegevens van myRemap.bcp
bulksgewijs wilt importeren in de myRemap
tabel, moet het indelingsbestand de volgende acties uitvoeren:
- Wijs het eerste gegevensveld toe aan de eerste kolom,
PersonID
. - Wijs het tweede gegevensveld toe aan de derde kolom
LastName
. - Wijs het derde gegevensveld toe aan de tweede kolom,
FirstName
. - Wijs het vierde gegevensveld toe aan de vierde kolom,
Gender
.
De eenvoudigste methode voor het maken van het indelingsbestand is met behulp van het bcp-hulpprogramma. Maak eerst een basisformaatbestand op basis van de bestaande tabel. Vervolgens het basisindelingsbestand wijzigen om het werkelijke gegevensbestand weer te geven.
Een bestand met een niet-XML-indeling maken
Raadpleeg Gebruik bestanden in niet-XML-indeling (SQL Server) voor gedetailleerde informatie. De volgende opdracht maakt gebruik van het hulpprogramma bcp voor het genereren van een bestand met een niet-XML-indeling, myRemap.fmt
, op basis van het schema van myRemap
. Bovendien wordt de kwalificatie c
gebruikt om tekengegevens op te geven, t,
wordt gebruikt om een komma op te geven als veldeindteken en T
wordt gebruikt om een vertrouwde verbinding op te geven met geïntegreerde beveiliging. Voer bij een opdrachtprompt de volgende opdracht in:
bcp TestDatabase.dbo.myRemap format nul -c -f D:\BCP\myRemap.fmt -t, -T
Het niet-XML-indelingsbestand wijzigen
Zie Structuur van bestanden zonder XML-indelingvoor meer informatie over terminologie. Open D:\BCP\myRemap.fmt
in Kladblok en voer de volgende wijzigingen uit:
- Rangschik de volgorde van de rijen in het indelingsbestand, zodat de rijen zich in dezelfde volgorde bevinden als de gegevens in
myRemap.bcp
. - Zorg ervoor dat de volgordewaarden van het hostbestandsveld opeenvolgend zijn.
- Zorg ervoor dat er een regelterugloop is na de laatste rij met indelingsbestanden.
Vergelijk de wijzigingen:
Vóór
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
Na
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
Het gewijzigde formaatbestand geeft nu weer:
- Het eerste gegevensveld in
myRemap.bcp
wordt toegewezen aan de eerste kolom,myRemap.. PersonID
- Het tweede gegevensveld in
myRemap.bcp
wordt toegewezen aan de derde kolom,myRemap.. LastName
- Het derde gegevensveld in
myRemap.bcp
wordt toegewezen aan de tweede kolom,myRemap.. FirstName
- Het vierde gegevensveld in
myRemap.bcp
wordt toegewezen aan de vierde kolom,myRemap.. Gender
Een XML-indelingsbestand maken
Bekijk SQL Server- (XML Format Files) voor gedetailleerde informatie. De volgende opdracht maakt gebruik van het hulpprogramma bcp voor het maken van een XML-indelingsbestand, myRemap.xml
, op basis van het schema van myRemap
. Bovendien wordt de kwalificatie c
gebruikt om tekengegevens op te geven, t,
wordt gebruikt om een komma op te geven als veldeindteken en T
wordt gebruikt om een vertrouwde verbinding op te geven met geïntegreerde beveiliging. De x
kwalificator moet worden gebruikt om een op XML-gebaseerd indelingsbestand te genereren. Voer bij een opdrachtprompt de volgende opdracht in:
bcp TestDatabase.dbo.myRemap format nul -c -x -f D:\BCP\myRemap.xml -t, -T
Het XML-indelingsbestand wijzigen
Bekijk schemasyntaxis voor XML-indelingsbestanden voor terminologie. Open D:\BCP\myRemap.xml
in Kladblok en voer de volgende wijzigingen uit:
De volgorde waarin de
<FIELD>
elementen worden gedeclareerd in het indelingsbestand, is de volgorde waarin deze velden worden weergegeven in het gegevensbestand. Draai dus de volgorde voor de<FIELD>
elementen om met id-kenmerken 2 en 3.Zorg ervoor dat de
<FIELD>
id-kenmerkwaarden opeenvolgend zijn.De volgorde van de
<COLUMN>
-elementen in het element <RIJ> definieert de volgorde waarin de bulkbewerking deze naar het doel verzendt. Het XML-indelingsbestand wijst elk<COLUMN>
element een lokale naam toe die geen relatie heeft met de kolom in de doeltabel van een bulkimportbewerking. De volgorde van de<COLUMN>
elementen is onafhankelijk van de volgorde van<FIELD>
elementen in een <RECORD> definitie. Elk<COLUMN>
element komt overeen met een<FIELD>
element (waarvan de id is opgegeven in het kenmerk SOURCE van het<COLUMN>
-element). De waarden voor<COLUMN>
SOURCE zijn dus de enige kenmerken waarvoor revisie is vereist. De volgorde voor<COLUMN>
SOURCE-kenmerken 2 en 3 omkeren.
Vergelijk de wijzigingen:
Vóór
<?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>
Na
<?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>
Het gewijzigde indelingsbestand weerspiegelt nu:
- FIELD 1, dat overeenkomt met KOLOM 1, wordt toegewezen aan de eerste tabelkolom,
myRemap.. PersonID
- VELD 2, dat overeenkomt met KOLOM 2, wordt opnieuw toegewezen aan de derde tabelkolom,
myRemap.. LastName
- VELD 3, dat overeenkomt met KOLOM 3, wordt opnieuw toegewezen aan de tweede tabelkolom,
myRemap.. FirstName
- FIELD 4, dat overeenkomt met KOLOM 4, wordt toegewezen aan de vierde tabelkolom,
myRemap.. Gender
Gegevens importeren met een formaatbestand om tabelkolommen toe te wijzen aan velden in het gegevensbestand
In de volgende voorbeelden worden de database-, gegevensbestand- en indelingsbestanden gebruikt die u eerder hebt gemaakt.
BCP- en niet-XML-indelingsbestand gebruiken
Voer bij een opdrachtprompt de volgende opdracht in.
bcp TestDatabase.dbo.myRemap IN D:\BCP\myRemap.bcp -f D:\BCP\myRemap.fmt -T
BCP- en XML-indelingsbestand gebruiken
Voer bij een opdrachtprompt de volgende opdracht in.
bcp TestDatabase.dbo.myRemap IN D:\BCP\myRemap.bcp -f D:\BCP\myRemap.xml -T
Gebruik BULK INSERT en een niet-XML-indelingsbestand
Voer het volgende Transact-SQL script uit.
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;
Gebruik BULK INSERT en XML-indelingsbestand
Voer het volgende Transact-SQL script uit.
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;
Gebruik OPENROWSET en een niet-XML-indelingsbestand
Voer het volgende Transact-SQL script uit.
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;
OPENROWSET- en XML-indelingsbestand gebruiken
Voer het volgende Transact-SQL script uit.
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;