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)
Systeemeigen indeling wordt aanbevolen wanneer u gegevens bulksgewijs overdraagt tussen meerdere exemplaren van SQL Server met behulp van een gegevensbestand dat geen dbCS-tekens (extended/double-byte character set) bevat.
Notitie
Als u gegevens bulksgewijs wilt overdragen tussen meerdere exemplaren van SQL Server met behulp van een gegevensbestand dat uitgebreide of DBCS-tekens bevat, moet u de systeemeigen Unicode-indeling gebruiken. Zie Unicode Native Format gebruiken voor het importeren of exporteren van gegevens (SQL Server)voor meer informatie.
De systeemeigen indeling onderhoudt de systeemeigen gegevenstypen van een database. Systeemeigen indeling is bedoeld voor gegevensoverdracht met hoge snelheid tussen SQL Server-tabellen. Als u een indelingsbestand gebruikt, hoeven de bron- en doeltabellen niet identiek te zijn. De gegevensoverdracht bestaat uit twee stappen:
De gegevens bulksgewijs exporteren uit een brontabel naar een gegevensbestand
De gegevens bulksgewijs importeren uit het gegevensbestand in de doeltabel
Het gebruik van een systeemeigen indeling tussen identieke tabellen voorkomt onnodige conversie van gegevenstypen van en naar tekenindeling, waardoor tijd en ruimte worden bespaard. Om de optimale overdrachtssnelheid te bereiken, worden er echter weinig controles uitgevoerd met betrekking tot gegevensopmaak. Zie de volgende beperkingenlijst om problemen met de geladen gegevens te voorkomen.
Beperkingen
Om gegevens succesvol in hun native formaat te importeren, zorg ervoor dat:
Het gegevensbestand heeft een systeemeigen indeling.
De doeltabel moet compatibel zijn met het gegevensbestand (met het juiste aantal kolommen, gegevenstype, lengte, NULL-status, enzovoort), of u moet een indelingsbestand gebruiken om elk veld toe te wijzen aan de bijbehorende kolommen.
Notitie
Als u gegevens importeert uit een bestand dat niet overeenkomt met de doeltabel, kan de importbewerking slagen, maar de gegevenswaarden die in de doeltabel zijn ingevoegd, zijn waarschijnlijk onjuist. Dit komt doordat de gegevens uit het bestand worden geïnterpreteerd met behulp van de indeling van de doeltabel. Elke discrepantie leidt tot het invoegen van onjuiste waarden. In geen geval kan een dergelijke niet-overeenkomende oorzaak echter logische of fysieke inconsistenties in de database veroorzaken.
Zie Bestanden opmaken voor het importeren of exporteren van gegevens (SQL Server)voor meer informatie over het gebruik van indelingsbestanden.
Bij een succesvolle import wordt de doeltabel niet beschadigd.
Hoe bcp gegevens in native formaat verwerkt
In deze sectie worden speciale overwegingen besproken voor de wijze waarop het hulpprogramma bcp gegevens exporteert en importeert in natuurlijke indeling.
Niet-teken-gegevens
Het bcp-hulpprogramma maakt gebruik van de interne binaire SQL Server-gegevensindeling voor het schrijven van niet-charactergegevens uit een tabel naar een gegevensbestand.
-
Aan het begin van elk veld van het type char of varchar, voegt bcp de prefixlengte toe.
Belangrijk
Wanneer de systeemeigen modus wordt gebruikt, converteert het bcp- hulpprogramma standaard tekens van SQL Server naar OEM-tekens voordat deze naar een gegevensbestand worden gekopieerd. Het hulpprogramma bcp tekens converteert van een gegevensbestand naar ANSI-tekens voordat deze bulksgewijs worden geïmporteerd in een SQL Server-tabel. Tijdens deze conversies kunnen uitgebreide tekengegevens verloren gaan. Voor uitgebreide tekens gebruikt u de systeemeigen Unicode-indeling of geeft u een codepagina op.
sql_variant gegevens
Als sql_variant gegevens worden opgeslagen als een SQLVARIANT in een gegevensbestand met native indeling, blijven alle kenmerken van de gegevens behouden. De metagegevens waarmee het gegevenstype van elke gegevenswaarde wordt vastgelegd, worden samen met de gegevenswaarde opgeslagen. Deze metagegevens worden gebruikt om de gegevenswaarde met hetzelfde gegevenstype te reproduceren in een doelkolom sql_variant.
Als het gegevenstype van de doelkolom niet sql_variantis, wordt elke gegevenswaarde geconverteerd naar het gegevenstype van de doelkolom, volgens de normale regels voor impliciete gegevensconversie. Als er een fout optreedt tijdens de gegevensconversie, wordt de huidige batch teruggedraaid. Alle tekens en varchar waarden die worden overgebracht tussen sql_variant kolommen, kunnen problemen hebben met codepagina-conversie.
Zie Data Type Conversion (Database Engine)voor meer informatie over gegevensconversie.
Opdrachtopties voor systeemeigen indeling
U kunt systeemeigen indelingsgegevens in een tabel importeren met behulp van bcp, BULK INSERT of INSERT ... SELECT * FROM OPENROWSET(BULK...). Voor een bcp commando of BULK INSERT instructie kunt u de gegevensindeling opgeven in de instructie. Voor een INSERT ... SELECT * FROM OPENROWSET(BULK...) instructie, moet u het dataformaat opgeven in een indelingsbestand.
Systeemeigen indeling wordt ondersteund door de volgende opdrachtopties:
Bevelen | Optie | Beschrijving |
---|---|---|
bcp | -n | Zorgt ervoor dat het bcp-hulpprogramma de systeemeigen gegevenstypen van de gegevens gebruikt.* |
BULK INSERT | DATAFILETYPE ='native' | Gebruikt de systeemeigen of uitgebreide systeemeigen gegevenstypen van de gegevens. Houd er rekening mee dat DATAFILETYPE niet nodig is als een indelingsbestand de gegevenstypen opgeeft. |
OPENROWSET | N.V.T | Moet een indelingsbestand gebruiken |
*Als u systeemeigen gegevens (-n) wilt laden in een indeling die compatibel is met eerdere versies van SQL Server-clients, gebruikt u de -V--switch. Zie Gegevens van systeemeigen en tekenindeling importeren uit eerdere versies van SQL Servervoor meer informatie.
Notitie
U kunt ook opmaak per veld opgeven in een indelingsbestand. Zie Bestanden opmaken voor het importeren of exporteren van gegevens (SQL Server)voor meer informatie.
Voorbeeldtestvoorwaarden
De voorbeelden in dit onderwerp zijn gebaseerd op de tabel en het indelingsbestand dat hieronder is gedefinieerd.
Voorbeeldtabel
Met het onderstaande script maakt u een testdatabase, een tabel met de naam myNative
en vult u de tabel met enkele initiële waarden. Voer de volgende Transact-SQL uit in 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;
Voorbeeldbestand met niet-XML-indeling
SQL Server ondersteunt twee typen indelingsbestand: niet-XML-indeling en XML-indeling. De niet-XML-indeling is de oorspronkelijke indeling die wordt ondersteund door eerdere versies van SQL Server. Raadpleeg niet-XML-indelingsbestanden (SQL Server) voor gedetailleerde informatie. Met de volgende opdracht wordt het hulpprogramma bcp gebruikt om een bestand met een niet-XML-indeling te genereren, myNative.fmt
, op basis van het schema van myNative
. Als u een bcp-opdracht wilt gebruiken om een indelingsbestand te maken, geeft u het -formaatargument op en gebruikt u nul in plaats van een gegevensbestandspad. Voor de indelingsoptie is ook de optie -f vereist. Bovendien wordt in dit voorbeeld de kwalificatie c gebruikt om tekengegevens op te geven en wordt T- gebruikt om een vertrouwde verbinding op te geven met geïntegreerde beveiliging. Voer bij een opdrachtprompt de volgende opdrachten in:
bcp TestDatabase.dbo.myNative format nul -f D:\BCP\myNative.fmt -T
REM Review file
Notepad D:\BCP\myNative.fmt
Belangrijk
Zorg ervoor dat het bestand met niet-XML-indeling eindigt met een regelterugloop\regelfeed. Anders krijgt u waarschijnlijk het volgende foutbericht:
SQLState = S1000, NativeError = 0
Error = [Microsoft][ODBC Driver 13 for SQL Server]I/O error while reading BCP format file
Voorbeelden
In de onderstaande voorbeelden wordt de database gebruikt, en worden de hierboven gemaakte bestanden geformatteerd.
BCP en systeemeigen indeling gebruiken om gegevens te exporteren
-n schakelaar en OUT opdracht. Opmerking: het gegevensbestand dat in dit voorbeeld is gemaakt, wordt in alle volgende voorbeelden gebruikt. Voer bij een opdrachtprompt de volgende opdrachten in:
bcp TestDatabase.dbo.myNative OUT D:\BCP\myNative.bcp -T -n
REM Review results
NOTEPAD D:\BCP\myNative.bcp
BCP en systeemeigen indeling gebruiken om gegevens te importeren zonder een indelingsbestand
-n schakeloptie en IN opdracht. Voer bij een opdrachtprompt de volgende opdrachten in:
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;"
BCP en systeemeigen indeling gebruiken om gegevens te importeren met een bestand met een niet-XML-indeling
-n en -f schakelopties en IN opdracht. Voer bij een opdrachtprompt de volgende opdrachten in:
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;"
BULK INSERT en naieve indeling gebruiken zonder een formaatbestand
argument DATAFILETYPE. Voer de volgende Transact-SQL uit in 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;
BULK INSERT en systeemeigen indeling gebruiken met een niet-XML-indelingsbestand
FORMATFILE-argument. Voer de volgende Transact-SQL uit in 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;
OPENROWSET en natuurlijk formaat gebruiken met een niet-XML-formaatbestand
FORMATFILE argument. Voer de volgende Transact-SQL uit in 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;
Gerelateerde taken
Gegevensindelingen gebruiken voor bulk-import of bulk-export
Gegevens in systeemeigen en tekenindeling importeren uit eerdere versies van SQL Server
Tekenindeling gebruiken voor het importeren of exporteren van gegevens (SQL Server)
Unicode-tekenindeling gebruiken voor het importeren of exporteren van gegevens (SQL Server)
Unicode Native Format gebruiken voor het importeren of exporteren van gegevens (SQL Server)
Zie ook
bcp Utility
BULK INSERT (Transact-SQL)
gegevenstypen (Transact-SQL)
sql_variant (Transact-SQL)
Gegevens in systeemeigen en tekenindeling importeren uit eerdere versies van SQL Server
OPENROWSET (Transact-SQL)
Unicode Native Format gebruiken voor het importeren of exporteren van gegevens (SQL Server)