Not
Åtkomst till denna sida kräver auktorisation. Du kan prova att logga in eller byta katalog.
Åtkomst till denna sida kräver auktorisation. Du kan prova att byta katalog.
gäller för:SQL Server
Azure SQL Database
Azure SQL Managed Instance
Azure Synapse Analytics
Analytics Platform System (PDW)
En datafil kan innehålla fler fält än antalet kolumner i tabellen. I den här artikeln beskrivs hur du ändrar både icke-XML- och XML-formatfiler för att hantera en datafil med fler fält genom att mappa tabellkolumnerna till motsvarande datafält och ignorera de extra fälten.
Mer information finns i Skapa en formatfil med bcp (SQL Server).
Anteckning
Antingen kan en icke-XML- eller XML-formatfil användas för att massimportera en datafil till tabellen med hjälp av ett bcp-verktygskommando , BULK INSERT -instruktionen (Transact-SQL) eller INSERT ... SELECT * FROM OPENROWSET BULK (Transact-SQL) -instruktion. Mer information finns i Använda en formatfil för att massimportera data (SQL Server).
Anteckning
Denna syntax, inklusive bulkinsättning, stöds inte i Azure Synapse Analytics. I Azure Synapse Analytics och andra molndatabasplattformsintegreringar utför du dataflytt via COPY-instruktionen i Azure Data Factoryeller med hjälp av T-SQL-instruktioner som COPY INTO och PolyBase.
Exempel på testvillkor
Exemplen på ändrade formatfiler i den här artikeln baseras på exempeltabellen myTestSkipField och datafilen D:\BCP\myTestSkipField.bcp. Ändra den lokala filplatsen i kodexemplet till en filplats på datorn.
Exempeltabell
Skriptet skapar en testdatabas och en tabell med namnet myTestSkipField. Kör följande Transact-SQL i Microsoft SQL Server Management Studio (SSMS):
CREATE DATABASE TestDatabase;
GO
USE TestDatabase;
CREATE TABLE myTestSkipField
(
PersonID smallint,
FirstName varchar(25),
LastName varchar(30)
);
Exempeldatafil
Skapa en tom fil D:\BCP\myTestSkipField.bcp och infoga följande data:
1,SkipMe,Anthony,Grosse
2,SkipMe,Alica,Fatnowna
3,SkipMe,Stella,Rosenhain
Skapa formatfilerna
Om du vill massimportera data från myTestSkipField.bcp till tabellen myTestSkipField måste formatfilen göra följande:
- Mappa det första datafältet till den första kolumnen
PersonID. - Hoppa över det andra datafältet.
- Mappa det tredje datafältet till den andra kolumnen,
FirstName. - Mappa det fjärde datafältet till den tredje kolumnen
LastName.
Den enklaste metoden för att skapa formatfilen är med hjälp av bcp-verktyget. Skapa först en basformatfil från den befintliga tabellen. För det andra ändrar du basformatfilen så att den återspeglar den faktiska datafilen.
Skapa en fil som inte är XML-format
Se Använd icke-XML-formatfiler (SQL Server) för detaljerad information. Följande kommando använder verktyget bcp för att generera en fil som inte är xml-format, myTestSkipField.fmt, baserat på schemat för myTestSkipField. Dessutom används c för att ange teckendata , t, används för att ange ett kommatecken som fältavgränsare och T används för att ange en betrodd anslutning med integrerad säkerhet. I en kommandotolk anger du följande kommando:
bcp TestDatabase.dbo.myTestSkipField format nul -c -f D:\BCP\myTestSkipField.fmt -t, -T
Ändra filen med icke-XML-format
Granska struktur för filer som inte är XML-format för terminologi. Öppna D:\BCP\myTestSkipField.fmt i Anteckningar och utför följande ändringar:
- Kopiera hela formatfilraden för
FirstNameoch klistra in den direkt efterFirstNamepå nästa rad. - Öka värdet för fältordningen för värdfilen med en för den nya raden och alla efterföljande rader.
- Öka antalet kolumner för att återspegla det faktiska antalet fält i datafilen.
- Ändra serverkolumnordningen från
2till0för den andra formatfilraden.
Jämför de ändringar som gjorts:
före
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
efter
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
Den ändrade formatfilen återspeglar nu:
- 4 datafält
- Det första datafältet i
myTestSkipField.bcpmappas till den första kolumnen,myTestSkipField.. PersonID - Det andra datafältet i
myTestSkipField.bcpmappas inte till någon kolumn. - Det tredje datafältet i
myTestSkipField.bcpmappas till den andra kolumnen,myTestSkipField.. FirstName - Det fjärde datafältet i
myTestSkipField.bcpmappas till den tredje kolumnenmyTestSkipField.. LastName
Skapa en XML-formatfil
Mer information finns i XML-formatfiler (SQL Server). Följande kommando använder verktyget bcp för att skapa en XML-formatfil, myTestSkipField.xml, baserat på schemat för myTestSkipField.
- Kvalificeraren
canvänds för att ange teckendata -
t,används för att ange ett kommatecken som en fältavgränsare -
Tanvänds för att ange en betrodd anslutning med integrerad säkerhet. -
x-kvalificeraren måste användas för att generera en XML-baserad formatfil.
I en kommandotolk anger du följande kommando:
bcp TestDatabase.dbo.myTestSkipField format nul -c -x -f D:\BCP\myTestSkipField.xml -t, -T
Ändra XML-formatfilen
Granska schemasyntax för XML-formatfiler för terminologi. Öppna D:\BCP\myTestSkipField.xml i Anteckningar och utför följande ändringar:
- Kopiera hela det andra fältet och klistra in det direkt efter det andra fältet på nästa rad.
- Öka
FIELD ID-värdet med 1 för det nyaFIELDoch för varje efterföljandeFIELD. - Öka värdet med
COLUMN SOURCE1 förFirstNameochLastNameför att återspegla den ändrade mappningen.
Jämför de ändringar som gjorts:
före
<?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>
efter
<?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>
Den ändrade formatfilen återspeglar nu:
- 4 datafält
-
FIELD1 som motsvararCOLUMN1 mappas till den första tabellkolumnen,myTestSkipField.. PersonID -
FIELD2 motsvarar inte någonCOLUMNoch därför mappas inte till någon tabellkolumn. -
FIELD3 som motsvararCOLUMN3 mappas till den andra tabellkolumnen,myTestSkipField.. FirstName -
FIELD4 som motsvararCOLUMN4 mappas till den tredje tabellkolumnen,myTestSkipField.. LastName
Importera data med en formatfil för att hoppa över ett datafält
Exemplen använder exempeldatabasen, datafilen och formatfilerna som skapas i den här artikeln.
Använd bcp-- och filformat som inte är XML-format
I en kommandotolk anger du följande kommando:
bcp TestDatabase.dbo.myTestSkipField IN D:\BCP\myTestSkipField.bcp -f D:\BCP\myTestSkipField.fmt -T
Använda bcp- och XML-formatfiler (SQL Server)
I en kommandotolk anger du följande kommando:
bcp TestDatabase.dbo.myTestSkipField IN D:\BCP\myTestSkipField.bcp -f D:\BCP\myTestSkipField.xml -T
Använd BULK INFÖRSEL (Transact-SQL) och icke-XML-formatfil
Kör följande Transact-SQL i 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;
Använd BULK INSERT (Transact-SQL) och XML-formatfiler (SQL Server)
Kör följande Transact-SQL i 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;
Använd OPENROWSET BULK (Transact-SQL) och en fil med icke-XML-format
Kör följande Transact-SQL i 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;
Använd OPENROWSET BULK - (Transact-SQL) och XML-formatfiler (SQL Server)
Kör följande Transact-SQL i 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;