Použití nativního formátu k importu nebo exportu dat (SQL Server)
platí pro:SQL Server
Azure SQL Database
Azure SQL Managed Instance
Azure Synapse Analytics
Analytics Platform System (PDW)
Nativní formát se doporučuje, když hromadně přenášíte data mezi více instancemi SQL Serveru pomocí datového souboru, který neobsahuje žádné znaky rozšířené nebo dvoubajtové znakové sady (DBCS).
Poznámka
Pokud chcete hromadně přenášet data mezi více instancemi SQL Serveru pomocí datového souboru, který obsahuje rozšířené znaky nebo znaky DBCS, měli byste použít nativní formát Unicode. Další informace najdete v tématu Použití nativního formátu Unicode k importu nebo exportu dat (SQL Server).
Nativní formát udržuje nativní datové typy databáze. Nativní formát je určený pro vysokorychlostní přenos dat mezi tabulkami SQL Serveru. Pokud používáte formátovací soubor, zdrojové a cílové tabulky nemusí být identické. Přenos dat zahrnuje dva kroky:
Hromadný export dat ze zdrojové tabulky do datového souboru
Hromadný import dat z datového souboru do cílové tabulky
Použití nativního formátu mezi identickými tabulkami zabraňuje zbytečnému převodu datových typů do formátu znaků a z formátu znaků, což šetří čas a místo. K dosažení optimální přenosové rychlosti se však provádí několik kontrol týkajících se formátování dat. Pokud chcete zabránit problémům s načtenými daty, podívejte se na následující seznam omezení.
Omezení
Pokud chcete úspěšně importovat data v nativním formátu, ujistěte se, že:
Datový soubor je v nativním formátu.
Cílová tabulka musí být kompatibilní s datovým souborem (se správným počtem sloupců, datovým typem, délkou, stavem NULL atd.), nebo musíte použít formátový soubor k namapování jednotlivých polí na odpovídající sloupce.
Poznámka
Pokud importujete data ze souboru, který se neshoduje s cílovou tabulkou, může operace importu proběhnout úspěšně, ale datové hodnoty vložené do cílové tabulky budou pravděpodobně nesprávné. Důvodem je to, že data ze souboru se interpretují pomocí formátu cílové tabulky. Proto jakákoli neshoda vede k vložení nesprávných hodnot. Za žádných okolností však taková neshoda nemůže způsobit logické nebo fyzické nekonzistence v databázi.
Informace o použití formátových souborů naleznete v tématu Formát souborů pro import nebo export dat (SQL Server).
Úspěšný import nenaškodí cílovou tabulku.
Jak bcp zpracovává data v nativním formátu
Tato část popisuje zvláštní aspekty, jak nástroj bcp exportuje a importuje data v nativním formátu.
Neznaková data
Nástroj bcp používá interní binární datový formát SQL Serveru k zápisu neznakových dat z tabulky do datového souboru.
-
Na začátku každého pole char nebo varchar, bcp přidá délku prefixu.
Důležitý
Při použití nativního režimu nástroj bcp převede znaky z SQL Serveru na znaky OEM předtím, než je zkopíruje do datového souboru. Nástroj bcp převede znaky z datového souboru na znaky ANSI, než je hromadně naimportuje do tabulky SQL Serveru. Během těchto převodů může dojít ke ztrátě rozšířených znakových dat. Pro rozšířené znaky použijte nativní formát Unicode nebo zadejte znakovou stránku.
sql_variant data
Pokud sql_variant data jsou uložena jako SQLVARIANT v datovém souboru nativního formátu, data udržují všechny své vlastnosti. Metadata, která zaznamenávají datový typ každé datové hodnoty, se ukládají spolu s datovou hodnotou. Tato metadata slouží k opětovnému vytvoření datové hodnoty se stejným datovým typem v cílovém sql_variant sloupci.
Pokud datový typ cílového sloupce není sql_variant, každá datová hodnota se převede na datový typ cílového sloupce podle normálních pravidel implicitního převodu dat. Pokud během převodu dat dojde k chybě, aktuální dávka se vrátí zpět. Všechny char a varchar hodnoty přenášené mezi sql_variant sloupci mohou mít problémy s konverzí znakové stránky.
Další informace o převodu dat naleznete v tématu Převod datových typů (databázový stroj).
Možnosti příkazů pro nativní formát
Nativní formát dat můžete importovat do tabulky pomocí bcp, BULK INSERT nebo INSERT ... SELECT * FROM OPENROWSET(BULK...). Pro příkaz bcp nebo PŘÍKAZ BULK INSERT můžete zadat formát dat v příkazu. Pro INSERT ... SELECT * FROM OPENROWSET(BULK...) příkaz, je nutné zadat formát dat ve formátu souboru.
Nativní formát je podporován následujícími možnostmi příkazů:
Příkaz | Možnost | Popis |
---|---|---|
Bcp | -n | Způsobí, že nástroj bcp použije nativní datové typy. |
HROMADNÉ VLOŽENÍ | DATAFILETYPE ='nativní' | Používá nativní nebo široké nativní datové typy dat. Všimněte si, že DATAFILETYPE není potřeba, pokud formátový soubor určuje datové typy. |
OPENROWSET | Není k dispozici | Musí používat formátový soubor. |
*Chcete-li načíst nativní data (-n) do formátu kompatibilního s dřívějšími verzemi klientů SQL Serveru, použijte přepínač -V. Další informace najdete v tématu Import nativních dat a formátu znaků z dřívějších verzí systému SQL Server.
Poznámka
Alternativně můžete v souboru formátu zadat formátování pro jednotlivá pole. Další informace naleznete v tématu Formát souborů pro import nebo export dat (SQL Server).
Příklady testovacích podmínek
Příklady v tomto tématu jsou založené na tabulce a formátovacím souboru definovaném níže.
Ukázková tabulka
Následující skript vytvoří testovací databázi, tabulku s názvem myNative
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.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;
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 XML formát. Formát jiného formátu než XML je původní formát podporovaný staršími verzemi SQL Serveru. Podrobné informace najdete v části Jiné než XML formátové soubory (SQL Server). Následující příkaz použije nástroj bcp k vygenerování souboru jiného formátu než XML, myNative.fmt
, na základě schématu myNative
. Pokud chcete k vytvoření souboru s formátem použít příkaz bcp, zadejte argument formátu 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í znakových dat a T slouží k určení důvěryhodného připojení pomocí integrovaného zabezpečení. Na příkazovém řádku zadejte následující příkazy:
bcp TestDatabase.dbo.myNative format nul -f D:\BCP\myNative.fmt -T
REM Review file
Notepad D:\BCP\myNative.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í databázi a formátové soubory vytvořené výše.
Export dat pomocí bcp a nativního formátu
-n přepínač a příkaz OUT. Poznámka: 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říkazy:
bcp TestDatabase.dbo.myNative OUT D:\BCP\myNative.bcp -T -n
REM Review results
NOTEPAD D:\BCP\myNative.bcp
Použití bcp a nativního formátu k importu dat bez formátu souboru
-n přepínač a příkaz IN. Na příkazovém řádku zadejte následující příkazy:
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;"
Použití bcp a nativního formátu k importu dat se souborem jiného formátu než XML
-n a -f přepínače a v příkazu. Na příkazovém řádku zadejte následující příkazy:
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;"
Použití funkce BULK INSERT a nativního formátu bez formátu souboru
argument DATAFILETYPE. V aplikaci Microsoft SQL Server Management Studio (SSMS) spusťte následující Transact-SQL:
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;
Použití funkce BULK INSERT a nativního formátu se souborem jiného formátu než XML
FORMATFILE argumentu. V aplikaci Microsoft SQL Server Management Studio (SSMS) spusťte následující Transact-SQL:
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;
Použití OPENROWSET a nativního formátu se souborem jiného formátu než XML
argumentu FORMATFILE. V aplikaci Microsoft SQL Server Management Studio (SSMS) spusťte následující Transact-SQL:
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;
Související úkoly
Použití datových formátů pro hromadný import nebo hromadný export
import dat nativního formátu a formátu znaků ze starších verzí SQL Serveru
použití formátu znaku k importu nebo exportu dat (SQL Server)
Použijte formát znaku Unicode pro import nebo export dat (SQL Server)
k importu nebo exportu dat (SQL Server) pomocí nativního formátu Unicode
Viz také
bcp Nástroj
hromadné vložení (Transact-SQL)
Datové typy (Transact-SQL)
sql_variant (Transact-SQL)
import dat nativního formátu a formátu znaků ze starších verzí SQL Serveru
OPENROWSET (Transact-SQL)
Použijte nativní formát Unicode k importu nebo exportu dat (SQL Server)