Sdílet prostřednictvím


Použití formátu znaků k importu nebo exportu dat (SQL Server)

platí pro:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsAnalytics Platform System (PDW)Warehouse v Microsoft Fabric

Formát znaků se doporučuje při hromadném exportu dat do textového souboru, který se má použít v jiném programu nebo při hromadném importu dat z textového souboru vygenerovaného jiným programem.

Formát znaků používá datový formát znaků pro všechny sloupce. Ukládání informací ve formátu znaků je užitečné, když se data používají s jiným programem, například tabulkou, nebo když je potřeba data zkopírovat do instance SQL Serveru od jiného dodavatele databáze, jako je Oracle.

Poznámka

Při hromadném přenosu dat mezi instancemi Microsoft SQL Serveru a pokud datový soubor obsahuje znaková data Unicode, ale ne žádné rozšířené znaky nebo znaky DBCS, použijte formát znaků Unicode. Další informace naleznete v tématu Použití formátu znaků unicode k importu nebo exportu dat (SQL Server).

Důležité informace o používání formátu znaků

Při použití formátu znaků zvažte:

  • Ve výchozím nastavení nástroj bcp odděluje pole s daty znaků znakem tabulátoru a ukončuje záznamy znakem nového řádku. Informace o tom, jak určit alternativní oddělovače, naleznete v tématu Ukončovací znaky polí a ukončovací znaky řádků (SQL Server).

  • Ve výchozím nastavení se před hromadným exportem nebo importem dat v režimu znaků provádějí následující převody:

    Směr hromadné operace Přeměna
    Vývoz Převede data na reprezentaci znaků. Pokud je to explicitně požadováno, data se převedou na požadovanou znakovou stránku pro sloupce znaků. Pokud není zadána žádná znaková stránka, znaková data se převádějí pomocí znakové stránky OEM klientského počítače.
    Dovoz Převede data znaků na nativní reprezentaci v případě potřeby a přeloží data znaků ze znakové stránky klienta na znakovou stránku jednoho nebo více cílových sloupců.
  • Chcete-li zabránit ztrátě rozšířených znaků během převodu, použijte formát znaku Unicode nebo zadejte znakovou stránku.

  • Všechna sql_variant data uložená v souboru ve formátu znaků se ukládají bez metadat. Každá datová hodnota je převedena na char formátu podle pravidel implicitního převodu dat. Při importu do sloupečku sql_variant se data importují jako char. Při importu do sloupce s datovým typem, který není sql_variant, se data převedou z char s využitím implicitního převodu. Další informace o převodu dat naleznete v tématu Převod datového typu (databázový stroj).

  • Nástroj bcp exportuje peněžní hodnoty jako datové soubory v znakovém formátu se čtyřmi číslicemi za desetinnou čárkou a bez symbolů seskupování číslic, jako jsou oddělovače čárek. Například sloupec peníze, který obsahuje hodnotu 1,234,567.123456, je ve větším množství exportován do datového souboru jako znakový řetězec 1234567.1235.

Možnosti příkazů pro formát znaků

Data formátu znaků můžete importovat do tabulky pomocí bcp, BULK INSERT (Transact-SQL)nebo OPENROWSET (Transact-SQL). Pro příkaz bcp nebo příkaz BULK INSERT (Transact-SQL) můžete v příkazu zadat formát dat. V příkazu OPENROWSET (Transact-SQL) je nutné zadat formát dat ve formátovacím souboru.

Formát znaků je podporován následujícími možnostmi příkazu:

Příkaz Možnost Popis
bcp -c Způsobí, že nástroj bcp použije znaková data.*
BULK INSERT DATAFILETYPE ='char' Při hromadném importu dat používejte formát znaků.
OPENROWSET Není k dispozici Musí používat formátový soubor.

* Chcete-li načíst data znaků (-c) do formátu kompatibilního s dřívějšími verzemi klientů SYSTÉMU SQL Server, použijte přepínač -V. Další informace naleznete v tématu Import nativních a znakových formát dat ze starších verzí sql Serveru.

Poznámka

Alternativně můžete v souboru formátu zadat formátování pro jednotlivá pole. Další informace najdete v tématu Formátovat soubory pro import nebo export dat (SQL Server).

Příklady testovacích podmínek

Příklady v tomto článku jsou založené na následující tabulce a formátu souboru.

Ukázková tabulka

Následující skript vytvoří testovací databázi, tabulku s názvem myChar a naplní tabulku některými počátečními hodnotami. V aplikaci Microsoft SQL Server Management Studio (SSMS) spusťte následující Transact-SQL:

CREATE DATABASE TestDatabase;
GO

USE TestDatabase;
CREATE TABLE dbo.myChar ( 
   PersonID smallint NOT NULL,
   FirstName varchar(25) NOT NULL,
   LastName varchar(30) NOT NULL,
   BirthDate date,
   AnnualSalary money
   );

-- Populate table
INSERT TestDatabase.dbo.myChar
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.myChar;

Ukázkový soubor formátu jiného formátu než XML

SQL Server podporuje dva typy formátového souboru: ne-XML formát a formát XML. Formát jiného formátu než XML je původní formát podporovaný staršími verzemi SQL Serveru. Další informace naleznete v tématu soubory formátu NEŽ XML (SQL Server). Následující příkaz používá nástroj bcp k vygenerování souboru jiného formátu než XML, myChar.fmt, na základě schématu myChar. Pokud chcete k vytvoření formátu souboru použít příkaz b cp, zadejte FORMAT argument a místo cesty k datovému souboru použijte nul. Možnost formátu také vyžaduje možnost -f. V tomto příkladu se kvalifikátor c používá k určení údajů o znacích a T slouží k určení důvěryhodného připojení s využitím integrovaného zabezpečení.

Na příkazovém řádku zadejte následující příkaz:

bcp TestDatabase.dbo.myChar format nul -f D:\BCP\myChar.fmt -T -c 

REM Review file
Notepad D:\BCP\myChar.fmt

Důležitý

Ujistěte se, že soubor bez formátu XML končí znakem return\line. V opačném případě se pravděpodobně zobrazí následující chybová zpráva:

SQLState = S1000, NativeError = 0
Error = [Microsoft][ODBC Driver 13 for SQL Server]I/O error while reading BCP format file

Příklady

Následující příklady používají soubory databáze a formátu vytvořené dříve v tomto článku.

Export dat pomocí bcp a formátu znaků

-c přepínač a OUT příkaz.

Datový soubor vytvořený v tomto příkladu se použije ve všech dalších příkladech.

Na příkazovém řádku zadejte následující příkaz:

bcp TestDatabase.dbo.myChar OUT D:\BCP\myChar.bcp -T -c

REM Review results
NOTEPAD D:\BCP\myChar.bcp

Použití bcp a znakového formátu k importu dat bez souboru formátu

Přepínač -c a příkaz IN. Na příkazovém řádku zadejte následující příkaz:

REM Truncate table (for testing)
SQLCMD -Q "TRUNCATE TABLE TestDatabase.dbo.myChar;"

REM Import data
bcp TestDatabase.dbo.myChar IN D:\BCP\myChar.bcp -T -c

REM Review results
SQLCMD -Q "SELECT * FROM TestDatabase.dbo.myChar;"

Použití bcp a znakového formátu pro import dat pomocí souboru s ne-XML formátem

Spínače -c a -f a příkaz IN. Na příkazovém řádku zadejte následující příkaz:

REM Truncate table (for testing)
SQLCMD -Q "TRUNCATE TABLE TestDatabase.dbo.myChar;"

REM Import data
bcp TestDatabase.dbo.myChar IN D:\BCP\myChar.bcp -f D:\BCP\myChar.fmt -T

REM Review results
SQLCMD -Q "SELECT * FROM TestDatabase.dbo.myChar;"

Použití funkce BULK INSERT a formátu znaků bez formátového souboru

Argument DATAFILETYPE. V aplikaci Microsoft SQL Server Management Studio (SSMS) spusťte následující Transact-SQL:

TRUNCATE TABLE TestDatabase.dbo.myChar; -- for testing
BULK INSERT TestDatabase.dbo.myChar
    FROM 'D:\BCP\myChar.bcp'
    WITH (
        DATAFILETYPE = 'Char'
        );

-- review results
SELECT * FROM TestDatabase.dbo.myChar;

Použití funkce BULK INSERT a formátu znaků se souborem jiného formátu než XML

Toto je příklad argumentu FORMATFILE. V aplikaci Microsoft SQL Server Management Studio (SSMS) spusťte následující Transact-SQL:

TRUNCATE TABLE TestDatabase.dbo.myChar; -- for testing
BULK INSERT TestDatabase.dbo.myChar
   FROM 'D:\BCP\myChar.bcp'
   WITH (
        FORMATFILE = 'D:\BCP\myChar.fmt'
        );

-- review results
SELECT * FROM TestDatabase.dbo.myChar;

Použití formátu OPENROWSET a znakového formátu se souborem jiného formátu než XML

Příklad argumentu FORMATFILE V aplikaci Microsoft SQL Server Management Studio (SSMS) spusťte následující Transact-SQL:

TRUNCATE TABLE TestDatabase.dbo.myChar;  -- for testing
INSERT INTO TestDatabase.dbo.myChar
    SELECT *
    FROM OPENROWSET (
        BULK 'D:\BCP\myChar.bcp', 
        FORMATFILE = 'D:\BCP\myChar.fmt'  
        ) AS t1;

-- review results
SELECT * FROM TestDatabase.dbo.myChar;

Použití datových formátů pro hromadný import nebo hromadný export: