Anteckning
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
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;