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)
Originalformat rekommenderas när du överför stora mängder data mellan flera instanser av SQL Server med hjälp av en datafil som inte innehåller några DBCS-tecken (extended/double-byte character set).
Obs
Om du vill massöverföring av data mellan flera instanser av SQL Server med hjälp av en datafil som innehåller utökade tecken eller DBCS-tecken bör du använda det interna Unicode-formatet. Mer information finns i Använda unicode-inbyggt format för att importera eller exportera data (SQL Server).
Det interna formatet underhåller de inbyggda datatyperna för en databas. Internt format är avsett för dataöverföring med hög hastighet mellan SQL Server-tabeller. Om du använder en formatfil behöver käll- och måltabellerna inte vara identiska. Dataöverföringen omfattar två steg:
Massexportera data från en källtabell till en datafil
Massimportera data från datafilen till måltabellen
Användning av inbyggt format mellan identiska tabeller undviker onödig konvertering av datatyper till och från teckenformat, vilket sparar tid och utrymme. För att uppnå den optimala överföringshastigheten utförs dock få kontroller när det gäller dataformatering. Information om hur du förhindrar problem med inlästa data finns i listan med följande begränsningar.
Begränsningar
Om du vill importera data i internt format kontrollerar du att:
Datafilen är i ursprungligt format.
Antingen måste måltabellen vara kompatibel med datafilen (med rätt antal kolumner, datatyp, längd, NULL-status och så vidare) eller så måste du använda en formatfil för att mappa varje fält till motsvarande kolumner.
Obs
Om du importerar data från en fil som inte stämmer överens med måltabellen kan importåtgärden lyckas, men de datavärden som infogas i måltabellen är sannolikt felaktiga. Det beror på att data från filen tolkas med hjälp av måltabellens format. Därför resulterar eventuella matchningsfel i infogningen av felaktiga värden. Men under inga omständigheter kan en sådan missanpassning orsaka logiska eller fysiska inkonsekvenser i databasen.
Information om hur du använder formatfiler finns i Formatera filer för att importera eller exportera data (SQL Server).
En lyckad import kommer inte att korrumpera måltabellen.
Så hanterar bcp data i internt format
I det här avsnittet beskrivs särskilda överväganden för hur bcp-verktyg exporterar och importerar data i internt format.
Icke-teckendata
Verktyget bcp använder det interna binära dataformatet för SQL Server för att skriva icke-teckendata från en tabell till en datafil.
teckendata eller varchar
I början av varje char eller varchar-fält lägger bcp till längden av prefixet.
Viktig
När inbyggt läge används konverterar som standard bcp-verktyget tecken från SQL Server till OEM-tecken innan de kopieras till en datafil. Verktyget bcp konverterar tecken från en datafil till ANSI-tecken innan det massimporterar dem till en SQL Server-tabell. Under dessa konverteringar kan utökade teckendata gå förlorade. För utökade tecken använder du antingen unicode-inbyggt format eller anger en kodsida.
sql_variant data
Om sql_variant data lagras som en SQLVARIANT i en intern formateringsdatafil bevarar data alla dess egenskaper. Metadata som registrerar datatypen för varje datavärde lagras tillsammans med datavärdet. Dessa metadata används för att återskapa datavärdet med samma datatyp i en målkolumn sql_variant.
Om datatypen för målkolumnen inte är sql_variantkonverteras varje datavärde till datatypen för målkolumnen enligt de normala reglerna för implicit datakonvertering. Om ett fel inträffar under datakonverteringen återställs den aktuella batchen. Alla tecken- och varchar-värden som överförs mellan sql_variant kolumner kan ha problem med konvertering av kodsidor.
Mer information om datakonvertering finns i Datatypkonvertering (databasmotor).
Kommandoalternativ för internt format
Du kan importera inbyggda formatdata till en tabell med hjälp av bcp, BULK INSERT eller INSERT ... VÄLJ * FRÅN OPENROWSET(BULK...). För ett bcp-kommando eller BULK INSERT--instruktion kan du ange dataformatet i -instruktionen. För en INSERT ... VÄLJ * FRÅN OPENROWSET(BULK...)-instruktion måste du ange dataformatet i en formatfil.
Internt format stöds av följande kommandoalternativ:
| Befallning | Alternativ | Beskrivning |
|---|---|---|
bcp |
-n |
Gör att bcp-verktyget använder de ursprungliga datatyperna. |
BULK INSERT |
DATAFILETYPE ='native' |
Använder inbyggda eller bredare inbyggda datatyper för data.
DATAFILETYPE behövs inte om en formatfil anger datatyperna. |
OPENROWSET |
Ej tillämpligt | Måste använda en formatfil |
* Om du vill läsa in interna (-n) data till ett format som är kompatibelt med tidigare versioner av SQL Server-klienter använder du växeln -V . Mer information finns i Importera inbyggda data och teckenformatdata från tidigare versioner av SQL Server.
Obs
Du kan också ange formatering per fält i en formatfil. Mer information finns i Formatera filer för att importera eller exportera data (SQL Server).
Exempel på testvillkor
Exemplen använder databasen och formaterar filer som skapats i den här artikeln.
Exempeltabell
Skriptet nedan skapar en testdatabas, en tabell med namnet myNative och fyller i tabellen med några inledande värden. Kör följande Transact-SQL i Microsoft SQL Server Management Studio (SSMS):
CREATE DATABASE TestDatabase;
GO
USE TestDatabase;
CREATE TABLE dbo.myNative (
PersonID smallint NOT NULL,
FirstName varchar(25) NOT NULL,
LastName varchar(30) NOT NULL,
BirthDate date,
AnnualSalary money
);
-- Populate table
INSERT TestDatabase.dbo.myNative
VALUES
(1, 'Anthony', 'Grosse', '1980-02-23', 65000.00),
(2, 'Alica', 'Fatnowna', '1963-11-14', 45000.00),
(3, 'Stella', 'Rossenhain', '1992-03-02', 120000.00);
-- Review Data
SELECT * FROM TestDatabase.dbo.myNative;
Exempelfil med icke-XML-format
SQL Server stöder två typer av formatfiler: icke-XML-format och XML-format. Icke-XML-format är det ursprungliga format som stöds av tidigare versioner av SQL Server. Mer information finns i Använda filer som inte är XML-format (SQL Server). Följande kommando använder verktyget bcp för att generera en fil som inte är xml-format, myNative.fmt, baserat på schemat för myNative. Om du vill använda kommandot bcp för att skapa en formatfil anger du argumentet format och använder nul i stället för en datafilsökväg. Formatalternativet kräver också alternativet -f. I det här exemplet används dessutom c för att ange teckendata och T används för att ange en betrodd anslutning med integrerad säkerhet. I en kommandotolk anger du följande kommandon:
bcp TestDatabase.dbo.myNative format nul -f D:\BCP\myNative.fmt -T
REM Review file
Notepad D:\BCP\myNative.fmt
Viktig
Se till att filen i ett annat format än XML slutar med en vagnretur\linjematning. Annars får du troligen följande felmeddelande:
SQLState = S1000, NativeError = 0
Error = [Microsoft][ODBC Driver 13 for SQL Server]I/O error while reading BCP format file
Exempel
Exemplen använder databasen och formaterar filer som skapats i den här artikeln.
Använda bcp och internt format för att exportera data
Strömbrytaren -n och kommandot OUT.
Datafilen som skapas i det här exemplet används i efterföljande exempel.
I en kommandotolk anger du följande kommandon:
bcp TestDatabase.dbo.myNative OUT D:\BCP\myNative.bcp -T -n
REM Review results
NOTEPAD D:\BCP\myNative.bcp
Använd bcp och internt format för att importera data utan en formatfil
Strömbrytaren -n och kommandot IN.
I en kommandotolk anger du följande kommandon:
REM Truncate table (for testing)
SQLCMD -Q "TRUNCATE TABLE TestDatabase.dbo.myNative;"
REM Import data
bcp TestDatabase.dbo.myNative IN D:\BCP\myNative.bcp -T -n
REM Review results
SQLCMD -Q "SELECT * FROM TestDatabase.dbo.myNative;"
Använd bcp och internt format för att importera data med en fil som inte är XML-format
-n och -f växlar och IN kommando.
I en kommandotolk anger du följande kommandon:
REM Truncate table (for testing)
SQLCMD -Q "TRUNCATE TABLE TestDatabase.dbo.myNative;"
REM Import data
bcp TestDatabase.dbo.myNative IN D:\BCP\myNative.bcp -f D:\BCP\myNative.fmt -T
REM Review results
SQLCMD -Q "SELECT * FROM TestDatabase.dbo.myNative;"
Använd BULK INSERT och inbyggt format utan en formatfil
Argumentet DATAFILETYPE.
Kör följande Transact-SQL i Microsoft SQL Server Management Studio (SSMS):
TRUNCATE TABLE TestDatabase.dbo.myNative; -- for testing
BULK INSERT TestDatabase.dbo.myNative
FROM 'D:\BCP\myNative.bcp'
WITH (
DATAFILETYPE = 'native'
);
-- review results
SELECT * FROM TestDatabase.dbo.myNative;
Använd BULK INSERT och internt format med en fil som inte är XML-format
Argumentet FORMATFILE.
Kör följande Transact-SQL i Microsoft SQL Server Management Studio (SSMS):
TRUNCATE TABLE TestDatabase.dbo.myNative; -- for testing
BULK INSERT TestDatabase.dbo.myNative
FROM 'D:\BCP\myNative.bcp'
WITH (
FORMATFILE = 'D:\BCP\myNative.fmt'
);
-- review results
SELECT * FROM TestDatabase.dbo.myNative;
Använd OPENROWSET och inbyggt format med en fil som inte är XML-format
Argumentet FORMATFILE.
Kör följande Transact-SQL i Microsoft SQL Server Management Studio (SSMS):
TRUNCATE TABLE TestDatabase.dbo.myNative; -- for testing
INSERT INTO TestDatabase.dbo.myNative
SELECT *
FROM OPENROWSET (
BULK 'D:\BCP\myNative.bcp',
FORMATFILE = 'D:\BCP\myNative.fmt'
) AS t1;
-- review results
SELECT * FROM TestDatabase.dbo.myNative;
Relaterade uppgifter
Så här använder du dataformat för massimport eller massexport:
Importera interna data och teckenformatdata från tidigare versioner av SQL Server
Använd teckenformat för att importera eller exportera data (SQL Server)
Använd unicode-teckenformat för att importera eller exportera data (SQL Server)
Använda unicode-inbyggt format för att importera eller exportera data (SQL Server)