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)
Unicode-tekenindeling wordt aanbevolen voor bulkoverdracht van gegevens tussen meerdere exemplaren van SQL Server met behulp van een gegevensbestand met uitgebreide/DBCS-tekens. Met de Unicode-tekengegevensindeling kunnen gegevens van een server worden geëxporteerd met behulp van een codepagina die verschilt van de codepagina die wordt gebruikt door de client die de bewerking uitvoert. In dergelijke gevallen heeft het gebruik van unicode-tekenindeling de volgende voordelen:
Als de bron- en doelgegevens Unicode-gegevenstypen zijn, behoudt het gebruik van de Unicode-tekenindeling alle tekengegevens.
Als de bron- en doelgegevens geen Unicode-gegevenstypen zijn, minimaliseert het gebruik van Unicode-tekenindeling het verlies van uitgebreide tekens in de brongegevens die niet op de bestemming kunnen worden weergegeven.
Overwegingen voor het gebruik van Unicode-tekenopmaak
Houd rekening met het volgende wanneer u de Unicode-tekenindeling gebruikt:
Het hulpprogramma bcp scheidt standaard de tekengegevensvelden met het tabteken en beëindigt de records met het nieuwe regelteken. Zie Veld- en rijeindtekens (SQL Server) opgevenvoor meer informatie over het opgeven van alternatieve eindtekens.
De sql_variant gegevens die zijn opgeslagen in een Unicode-gegevensbestand met tekenindeling, werken op dezelfde manier als in een gewoon tekenindelingbestand, behalve dat de gegevens worden opgeslagen als nchar in plaats van char gegevens. Voor meer informatie over tekenopmaak, zie Sortering en Unicode-ondersteuning.
Speciale overwegingen voor het gebruik van Unicode-tekenindeling, bcp en een indelingsbestand
Gegevensbestanden met de Unicode-tekenindeling volgen de conventies voor Unicode-bestanden. De eerste twee bytes van het bestand zijn hexadecimale getallen, 0xFFFE. Deze bytes fungeren als bytevolgordemarkeringen (BOM), waarmee wordt opgegeven of de byte met hoge volgorde als eerste of laatste in het bestand wordt opgeslagen. De bcp Utility kan de BOM verkeerd interpreteren en ervoor zorgen dat een deel van het importproces mislukt; mogelijk krijgt u een foutbericht dat er ongeveer als volgt uitziet:
Starting copy...
SQLState = 22005, NativeError = 0
Error = [Microsoft][ODBC Driver 13 for SQL Server]Invalid character value for cast specification
De BOM kan onder de volgende omstandigheden verkeerd worden geïnterpreteerd.
De bcp Utility wordt gebruikt en de -w switch wordt gebruikt om Unicode-teken aan te geven
Er wordt een indelingsbestand gebruikt
Het eerste veld in het gegevensbestand is geen tekenreeks.
Overweeg of een van de volgende tijdelijke oplossingen beschikbaar is voor uw specifieke situatie:
Gebruik geen bestandsindeling. Hieronder vindt u een voorbeeld van deze tijdelijke oplossing. Zie BCP- en Unicode-tekenindeling gebruiken om gegevens te importeren zonder eenindeling ,
Gebruik de optie -c in plaats van -w,
Exporteer de gegevens opnieuw met behulp van een systeemeigen indeling.
Gebruik BULK INSERT of OPENROWSET. Hieronder vindt u voorbeelden van deze tijdelijke oplossing. Zie BULK INSERT en Unicode-tekenindeling gebruiken met een bestand met een niet-XML-indelingsbestand en Het gebruik van OPENROWSET- en Unicode-tekenindeling met een niet-XML-indelingsbestand,
Voeg handmatig de eerste record in de doeltabel in en gebruik vervolgens -F 2 schakeloptie om het importeren te laten beginnen bij de tweede record,
Voeg handmatig een dummyrecord als eerste regel in het gegevensbestand in en gebruik vervolgens de -F 2 switch om het importeren bij de tweede regel te laten beginnen. Hieronder vindt u een voorbeeld van deze tijdelijke oplossing. Zie BCP en Unicode-tekenindeling gebruiken om gegevens te importeren met een bestand zonder XML-indeling,
Gebruik een faseringstabel waarbij de eerste kolom een tekengegevenstype is, of
Exporteer de gegevens opnieuw en wijzig de volgorde van het gegevensveld, zodat het eerste gegevensveld teken is. Gebruik vervolgens een opmaakbestand om het gegevensveld te herindelen naar de werkelijke volgorde in de tabel. Zie bijvoorbeeld Een indelingsbestand gebruiken om tabelkolommen toe te wijzen aan Data-File velden (SQL Server).
Opdrachtopties voor Unicode-tekenopmaak
U kunt unicode-tekenopmaakgegevens importeren in een tabel met behulp van bcp, BULK INSERT of INSERT ... SELECT * FROM OPENROWSET(BULK...). Voor een bcp opdracht of instructie BULK INSERT kunt u de gegevensindeling opgeven in de instructie. Voor een INSERT ... SELECT * FROM OPENROWSET(BULK...) instructie, moet u de gegevensindeling opgeven in een formatbestand.
Unicode-tekenindeling wordt ondersteund door de volgende opdrachtopties:
Bevelen | Optie | Beschrijving |
---|---|---|
bcp | -w | Maakt gebruik van de Unicode-tekenindeling. |
BULK-INVOEGEN | DATAFILETYPE ='widechar' | Hiermee wordt de Unicode-tekenindeling gebruikt bij het bulksgewijs importeren van gegevens. |
OPENROWSET | N.V.T | Moet een indelingsbestand gebruiken |
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.
Voorbeeld van testvoorwaarden
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 myWidechar
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.myWidechar (
PersonID smallint NOT NULL,
FirstName nvarchar(25) NOT NULL,
LastName nvarchar(30) NOT NULL,
BirthDate date,
AnnualSalary money
);
-- Populate table
INSERT TestDatabase.dbo.myWidechar
VALUES
(1, N'ϴAnthony', N'Grosse', '02-23-1980', 65000.00),
(2, N'❤Alica', N'Fatnowna', '11-14-1963', 45000.00),
(3, N'☎Stella', N'Rossenhain', '03-02-1992', 120000.00);
-- Review Data
SELECT * FROM TestDatabase.dbo.myWidechar;
voorbeeldbestand zonder 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-bestanden (SQL Server) voor meer gedetailleerde informatie. Met de volgende opdracht wordt het hulpprogramma bcp gebruikt om een bestand met een niet-XML-indeling te genereren, myWidechar.fmt
, op basis van het schema van myWidechar
. Als u een opdracht bcp wilt gebruiken om een indelingsbestand te maken, geeft u het argument indeling 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.myWidechar format nul -f D:\BCP\myWidechar.fmt -T -w
REM Review file
Notepad D:\BCP\myWidechar.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 worden de database en de hierboven aangemaakte opmaakbestanden gebruikt.
BCP en Unicode-tekenindeling gebruiken om gegevens te exporteren
-w switch 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.myWidechar OUT D:\BCP\myWidechar.bcp -T -w
REM Review results
NOTEPAD D:\BCP\myWidechar.bcp
BCP en Unicode-tekenindeling gebruiken om gegevens te importeren zonder een indelingsbestand
-w schakeloptie en IN opdracht. Voer bij een opdrachtprompt de volgende opdrachten in:
REM Truncate table (for testing)
SQLCMD -Q "TRUNCATE TABLE TestDatabase.dbo.myWidechar;"
REM Import data
bcp TestDatabase.dbo.myWidechar IN D:\BCP\myWidechar.bcp -T -w
REM Review results is SSMS
BCP en Unicode-tekenindeling gebruiken om gegevens te importeren met een niet-XML-indelingsbestand
-w en -f schakelopties en IN opdracht. Er moet een workaround worden gebruikt, aangezien dit voorbeeld bcp betreft, een indelingsbestand, een Unicode-teken, en het eerste gegevensveld in het gegevensbestand is niet-tekstgebaseerd. Zie Speciale overwegingen voor het gebruik van Unicode-tekenindeling, BCP en een indelingsbestandhierboven. Het gegevensbestand myWidechar.bcp
wordt gewijzigd door een extra record toe te voegen als een 'dummy'-record die vervolgens wordt overgeslagen met de -F 2
-switch.
Voer bij een opdrachtprompt de volgende opdrachten in en volg de wijzigingsstappen:
REM Truncate table (for testing)
SQLCMD -Q "TRUNCATE TABLE TestDatabase.dbo.myWidechar;"
REM Open data file
Notepad D:\BCP\myWidechar.bcp
REM Copy first record and then paste as new first record. This additional record is the "dummy" record.
REM Close file.
REM Import data instructing bcp to skip dummy record with the -F 2 switch.
bcp TestDatabase.dbo.myWidechar IN D:\BCP\myWidechar.bcp -f D:\BCP\myWidechar.fmt -T -F 2
REM Review results is SSMS
REM Return data file to original state for usage in other examples
bcp TestDatabase.dbo.myWidechar OUT D:\BCP\myWidechar.bcp -T -w
BULK INSERT en Unicode-tekenindeling gebruiken zonder een indelingsbestand
argument DATAFILETYPE. Voer de volgende Transact-SQL uit in Microsoft SQL Server Management Studio (SSMS):
TRUNCATE TABLE TestDatabase.dbo.myWidechar; -- for testing
BULK INSERT TestDatabase.dbo.myWidechar
FROM 'D:\BCP\myWidechar.bcp'
WITH (
DATAFILETYPE = 'widechar'
);
-- review results
SELECT * FROM TestDatabase.dbo.myWidechar;
BULK INSERT en Unicode-tekenindeling 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.myWidechar; -- for testing
BULK INSERT TestDatabase.dbo.myWidechar
FROM 'D:\BCP\myWidechar.bcp'
WITH (
FORMATFILE = 'D:\BCP\myWidechar.fmt'
);
-- review results
SELECT * FROM TestDatabase.dbo.myWidechar;
OPENROWSET en Unicode-Tekenindeling 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.myWidechar; -- for testing
INSERT INTO TestDatabase.dbo.myWidechar
SELECT *
FROM OPENROWSET (
BULK 'D:\BCP\myWidechar.bcp',
FORMATFILE = 'D:\BCP\myWidechar.fmt'
) AS t1;
-- review results
SELECT * FROM TestDatabase.dbo.myWidechar;
Gerelateerde taken
Gegevensindelingen gebruiken voor bulkimport of bulkexport
Gegevens in systeemeigen en tekenindeling importeren uit eerdere versies van SQL Server
Tekenindeling gebruiken voor het importeren of exporteren van gegevens (SQL Server)
Systeemeigen indeling 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)
OPENROWSET (Transact-SQL)
gegevenstypen (Transact-SQL)
Sorteren en Unicode-ondersteuning