Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Aplica-se a:SQL Server
Banco de Dados SQL do Azure
Instância Gerenciada de SQL do Azure
Azure Synapse Analytics
Analytics Platform System (PDW)
O formato de caractere Unicode é recomendado para transferir em massa dados entre várias instâncias do SQL Server usando um arquivo de dados com caracteres estendidos DBCS. O formato de dados de caractere Unicode permite que os dados sejam exportados de um servidor usando uma página de código diferente da página de código usada pelo cliente que está executando a operação. Em tais casos, o uso do formato de caractere Unicode tem as seguintes vantagens:
Se os dados de origem e destino forem tipos de dados Unicode, o uso do formato de caractere Unicode preservará todos os dados de caractere.
Se os dados de origem e destino não forem tipos de dados Unicode, o uso do formato de caractere Unicode minimizará a perda de caracteres estendidos nos dados de origem que não podem ser representados no destino.
Considerações sobre como usar o formato de caractere Unicode
Ao usar o formato de caractere Unicode, considere:
Por padrão, o utilitário bcp separa os campos dos dados de caractere com o caractere de guia e termina os registros com o caractere de nova linha. Para obter informações sobre como especificar terminadores alternativos, consulte Especificar terminadores de campo e linha (SQL Server).
Os dados de sql_variant que são armazenados em um arquivo de dados no formato de caractere Unicode operam da mesma maneira que operam em um arquivo de dados no formato de caractere, com a exceção de que os dados são armazenados como nchar em vez de dados char . Para obter mais informações sobre o formato de caractere, consulte Ordenação e suporte a Unicode.
Considerações especiais sobre como usar o formato de caractere Unicode, bcp e um arquivo de formato
Os arquivos de dados em formato de caractere Unicode seguem as convenções para arquivos Unicode. Os primeiros dois bytes do arquivo são números hexadecimais, 0xFFFE. Esses bytes servem como marcas de ordem do byte (BOM), especificando se o byte de ordem alta é armazenado em primeiro ou por último no arquivo. O Utilitário bcp pode interpretar mal o BOM e fazer com que parte do processo de importação falhe; você pode receber uma mensagem de erro semelhante à seguinte:
Starting copy...
SQLState = 22005, NativeError = 0
Error = [Microsoft][ODBC Driver 13 for SQL Server]Invalid character value for cast specification
O BOM pode ser mal interpretado sob as seguintes condições:
O utilitário bcp é usado e o
-w
comutador é usado para indicar o caractere UnicodeÉ usado um arquivo de formato
O primeiro campo no arquivo de dados é não caractere
Considere se alguma das seguintes soluções alternativas pode estar disponível para sua situação específica :
Não use um arquivo de formato. Um exemplo dessa solução alternativa é fornecido em Usando bcp e o formato de caractere Unicode para importar dados sem um arquivo de formato.
Use a opção
-c
em vez de-w
,Exportar novamente os dados usando um formato nativo,
Use BULK INSERT (Transact-SQL) ou OPENROWSET (Transact-SQL). Exemplos dessas soluções alternativas são fornecidos nas seções Usando BULK INSERT e formato de caractere Unicode com um arquivo de formato não XML e Usando OPENROWSET e formato de caractere Unicode com um arquivo de formato não XML.
Insira manualmente o primeiro registro na tabela de destino e, em seguida, use
-F 2
o comutador para que a importação comece no segundo registro,Insira manualmente um registro fictício como o primeiro no arquivo de dados e depois use o alternador
-F 2
para que a importação comece no segundo registro. Um exemplo dessa solução alternativa é fornecido na seção Usando bcp e o formato de caractere Unicode para importar dados com um arquivo de formato não XML.Use uma tabela de preparo na qual a primeira coluna é um tipo de dados de caractere, ou
Exporte novamente os dados e altere a ordem do campo de dados para que o primeiro campo de dados seja o caractere. Em seguida, use um arquivo de formato para remapear o campo de dados para a ordem real na tabela. Para obter um exemplo, consulte Usar um arquivo de formato para mapear colunas de tabela para campos de arquivo de dados (SQL Server).
Opções de comando para o formato de caractere Unicode
Você pode importar dados de formato de caractere Unicode para uma tabela usando bcp, BULK INSERT ou OPENROWSET. Para um comando bcp ou uma instrução BULK INSERT , você pode especificar o formato de dados na instrução. Para uma instrução OPENROWSET , você deve especificar o formato de dados em um arquivo de formato.
Formato de caractere Unicode tem suporte nas seguintes opções da linha de comando:
Comando | Opção | Descrição |
---|---|---|
bcp |
-w |
Usa o formato de caractere Unicode. |
BULK INSERT |
DATAFILETYPE ='widechar' |
Usa o formato de caractere Unicode na importação em massa de dados. |
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, consulte arquivos de formato para importar ou exportar dados (SQL Server).
Condições de teste de exemplo
Os exemplos neste artigo são baseados na tabela e no arquivo de formato a seguir.
Tabela de exemplo
O script a seguir cria um banco de dados de teste, uma tabela chamada myWidechar
e preenche a tabela com alguns valores iniciais. Execute o seguinte script Transact-SQL no Microsoft SSMS (SQL Server Management Studio):
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;
Arquivo de formato não XML de exemplo
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. Para obter mais informações, consulte Usar arquivos de formato não XML (SQL Server).
O comando a seguir usa o utilitário bcp para gerar um arquivo de formato não XML, myWidechar.fmt
com base no esquema de myWidechar
. 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 de formato também requer a opção -f
. Além disso, para este 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.myWidechar format nul -f D:\BCP\myWidechar.fmt -T -w
REM Review file
Notepad D:\BCP\myWidechar.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ê poderá 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 a seguir usam o banco de dados e os arquivos de formato criados anteriormente.
Usar o formato de caractere bcp e Unicode para exportar dados
-w
comutador e OUT
comando. O arquivo de dados criado neste exemplo é usado em todos os exemplos subsequentes. No prompt de comando, digite os seguintes comandos:
bcp TestDatabase.dbo.myWidechar OUT D:\BCP\myWidechar.bcp -T -w
REM Review results
NOTEPAD D:\BCP\myWidechar.bcp
Usar o formato de caractere bcp e Unicode para importar dados sem um arquivo de formato
-w
comutador e IN
comando. No prompt de comando, digite os seguintes comandos:
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
Usar o formato de caractere bcp e Unicode para importar dados com um arquivo de formato não XML
-w
e -f
interruptores e IN
comandos. Uma solução alternativa precisa ser usada, pois este exemplo envolve bcp, um arquivo de formato, um caractere Unicode e o primeiro campo de dados no arquivo de dados não é caractere. Consulte considerações especiais sobre como usar o formato de caractere Unicode, bcp e um arquivo de formato anteriormente no artigo. O arquivo myWidechar.bcp
de dados é alterado adicionando um registro extra como um registro "fictício" que, em seguida, é ignorado com a opção -F 2
.
No prompt de comando, digite os seguintes comandos e siga as etapas de modificação:
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
Usar o formato de caractere BULK INSERT e Unicode sem um arquivo de formato
DATAFILETYPE
argumento. Execute o seguinte script Transact-SQL no Microsoft SSMS (SQL Server Management Studio):
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;
Usar o formato de caractere BULK INSERT e Unicode com um arquivo de formato não XML
FORMATFILE
argumento. Execute o seguinte script Transact-SQL no Microsoft SSMS (SQL Server Management Studio):
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;
Usar OPENROWSET com formato de caractere Unicode e um arquivo de formato não XML
FORMATFILE
argumento. Execute o seguinte script Transact-SQL no Microsoft SSMS (SQL Server Management Studio):
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;
Tarefas relacionadas
Para usar formatos de dados para importação ou exportação em massa
- Importar dados no formato nativo e de caractere de versões anteriores do SQL Server
- Usar o formato de caractere para importar ou exportar dados (SQL Server)
- Usar o formato nativo para importar ou exportar dados (SQL Server)
- Usar o formato nativo Unicode para importar ou exportar dados (SQL Server)