Usar o formato nativo Unicode para importar ou exportar dados (SQL Server)

Aplica-se a:SQL ServerBanco de Dados SQL do AzureInstância Gerenciada de SQL do AzureAzure Synapse AnalyticsPDW (Analytics Platform System)

O formato nativo Unicode é útil quando as informações precisam ser copiadas de uma instalação do Microsoft SQL Server para outra. O uso de formato nativo para dados do tipo não caractere economiza tempo, eliminando a conversão desnecessária de tipos de dados de e para o formato de caractere. O uso de formato de caractere Unicode para obter todos os dados de caractere impede a perda de qualquer caractere estendido durante a transferência de dados em massa entre servidores que usam páginas de código diferentes. Um arquivo de dados em formato nativo Unicode pode ser lido por qualquer método de importação em massa.

O formato nativo Unicode é recomendado para transferir em massa dados entre várias instâncias do SQL Server usando um arquivo de dados com caracteres estendidos DBCS. Para obter dados do tipo não caractere, o formato nativo Unicode usa tipos de dados nativos (banco de dados). Para dados de caracteres, tal como char, nchar, varchar, nvarchar, text, varchar(max), nvarchar(max)e ntext, o formato nativo Unicode usa o formato de dados de caractere Unicode.

Os dados sql_variant armazenados como um SQLVARIANT em um arquivo de dados do formato nativo Unicode operam da mesma maneira como em um arquivo de dados do formato nativo, exceto pelos valores char e varchar , que são convertidos para nchar e nvarchar, os quais dobram a quantidade de espaço de armazenamento necessária para as colunas afetadas. Os metadados originais são preservados e os valores são reconvertidos aos seus tipos de dados originais char e varchar quando importados em massa em uma coluna de tabela.

Neste tópico:
Opções de comando para formato nativo Unicode
Condições de teste de exemplo
 ● Tabela de amostra
 ● Arquivo em formato não XML de amostra
Exemplos
 ● Usando bcp e formato nativo Unicode para exportar dados
 ● Usando bcp e formato nativo Unicode para importar dados sem um arquivo de formato
 ● Usando bcp e formato nativo Unicode para importar dados com um arquivo de formato não XML
 ● Usando BULK INSERT e formato nativo Unicode sem um arquivo de formato
 ● Usando BULK INSERT e formato nativo Unicode com um arquivo de formato não XML
 ● Usando OPENROWSET e formato nativo Unicode com um arquivo de formato não XML
Tarefas relacionadas

Opções de comando para formato nativo Unicode

Você pode importar dados de formato nativo Unicode para uma tabela usando bcp, BULK INSERT ou INSERT... SELECT * FROM OPENROWSET(BULK...). Para um comando bcp ou uma instrução BULK INSERT, você pode especificar o formato de dados na instrução. Para uma instrução INSERT... SELECT * FROM OPENROWSET(BULK...), é necessário especificar o formato dos dados em um arquivo de formato.

O formato nativo Unicode tem suporte nas seguintes opções de comando:

Comando Opção Descrição
bcp -N Faz com que o utilitário bcp use o formato nativo Unicode que usa tipos de dados nativos (banco de dados) para todos os dados do tipo não caractere e formato de dados de caractere Unicode para obter todos os dados de caracteres (char, nchar, varchar, nvarchar, texte ntext).
BULK INSERT DATAFILETYPE ='widenative' Usa o formato nativo Unicode na importação de dados em massa.
OPENROWSET N/D Deve usar um arquivo de formato

Observação

Como alternativa, você pode especificar a formatação por campo, em um arquivo de formato. Para obter mais informações, confira Arquivos de formato para importação ou exportação de dados (SQL Server).

Condições de teste de exemplo

Os exemplos neste tópico baseiam-se na tabela e no arquivo de formato definidos abaixo.

Tabela de exemplo

O script a seguir cria um banco de dados de teste, uma tabela chamada de myWidenative e preenche a tabela com alguns valores iniciais. Execute o seguinte comando Transact-SQL no Microsoft SQL Server Management Studio (SSMS):

CREATE DATABASE TestDatabase;
GO

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

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

Exemplo de arquivo de formato não XML

O SQL Server dá suporte a dois tipos de arquivo de formato: XML e não XML. O formato não XML é o formato original com suporte em versões anteriores do SQL Server. Examine Arquivos de formato não XML (SQL Server) para obter informações detalhadas. O comando a seguir usará o utilitário bcp para gerar um arquivo de formato não XML, myWidenative.fmt, com base no esquema de myWidenative. Para usar um comando bcp para criar um arquivo de formato, especifique o argumento format e use nul em vez de um caminho de arquivo de dados. A opção format também exige a opção -f . Além disso, neste exemplo, o qualificador c é usado para especificar dados de caractere, e T é usado para especificar uma conexão confiável usando a segurança integrada. No prompt de comando, digite os seguintes comandos:

bcp TestDatabase.dbo.myWidenative format nul -f D:\BCP\myWidenative.fmt -T -N

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

Importante

Verifique se o arquivo de formato não XML termina com um retorno de carro/alimentação de linha. Caso contrário, você provavelmente receberá a seguinte mensagem de erro:

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

Exemplos

Os exemplos abaixo usam o banco de dados e os arquivos de formato criados acima.

Usando bcp e formato nativo Unicode para exportar dados

Opção -N e comando OUT . Observação: o arquivo de dados criado neste exemplo será usado em todos os exemplos subsequentes. No prompt de comando, digite os seguintes comandos:

bcp TestDatabase.dbo.myWidenative OUT D:\BCP\myWidenative.bcp -T -N

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

Usando bcp e formato nativo Unicode para importar dados sem um arquivo de formato

Opção -N e comando IN . No prompt de comando, digite os seguintes comandos:

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

REM Import data
bcp TestDatabase.dbo.myWidenative IN D:\BCP\myWidenative.bcp -T -N

REM Review results is SSMS

Usando bcp e formato nativo Unicode para importar dados com um arquivo de formato não XML

Opções -N e -f switches e IN comme. No prompt de comando, digite os seguintes comandos:

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

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

REM Review results is SSMS

Usando BULK INSERT e formato nativo Unicode sem um arquivo de formato

ArgumentoDATAFILETYPE . Execute o seguinte comando Transact-SQL no Microsoft SQL Server Management Studio (SSMS):

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

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

Usando BULK INSERT e formato nativo Unicode com um arquivo de formato não XML

ArgumentoFORMATFILE . Execute o seguinte comando Transact-SQL no Microsoft SQL Server Management Studio (SSMS):

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

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

Usando OPENROWSET e formato nativo Unicode com um arquivo de formato não XML

ArgumentoFORMATFILE . Execute o seguinte comando Transact-SQL no Microsoft SQL Server Management Studio (SSMS):

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

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

Para usar formatos de dados para importação ou exportação em massa

Consulte Também

Utilitário bcp
BULK INSERT (Transact-SQL)
OPENROWSET (Transact-SQL)
Tipos de dados (Transact-SQL)