Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
O formato de caractere Unicode é recomendado para a transferência em massa de dados entre várias instâncias do SQL Server usando um arquivo de dados que contém 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 que difere da página de código usada pelo cliente que está executando a operação. Nesses 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 caracteres.
Se os dados de origem e de 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 o uso do formato de caractere Unicode
Ao usar o formato de caractere Unicode, considere:
Por padrão, o utilitário bcp separa os campos de dados de caracteres com o caractere de tabulação e encerra 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 sql_variant armazenados em um arquivo de dados de formato de caractere Unicode operam da mesma forma que operam em um arquivo de dados de formato de caractere, exceto que os dados são armazenados como nchar em vez de dados char . Para obter mais informações sobre o formato de caracteres, consulte Suporte a agrupamento e Unicode.
Considerações especiais sobre o uso do formato de caractere Unicode, bcp e um arquivo de formato
Os arquivos de dados de formato de caractere Unicode seguem as convenções para arquivos Unicode. Os dois primeiros bytes do arquivo são números hexadecimais, 0xFFFE. Esses bytes servem como marcas de ordem de bytes (BOM), especificando se o byte de ordem alta é armazenado primeiro ou por último no arquivo. O utilitário bcp pode interpretar incorretamente o BOM (Byte Order Mark) e fazer com que parte do seu processo de importação falhe; 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
A lista técnica pode ser mal interpretada nas seguintes condições:
O utilitário bcp é usado e o
-wswitch é usado para indicar o caractere UnicodeUm arquivo de formato é usado
O primeiro campo no ficheiro de dados não é um 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 no Usando o formato de caractere bcp e Unicode para importar dados sem um arquivo de formato,
Use o
-cinterruptor em vez de-w,Reexportar 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 o formato de caractere BULK INSERT e Unicode com um arquivo de formato não-XML e Usando o formato de caractere OPENROWSET e Unicode com um arquivo de formato não-XML .
Insira manualmente o primeiro registro na tabela de destino e, em seguida, use
-F 2o switch para que a importação comece no segundo registro,Insira manualmente o primeiro registro fictício no arquivo de dados e, em seguida, use
-F 2o switch para iniciar a importação no segundo registro. Um exemplo dessa solução alternativa é fornecido na seção Usando o formato de caractere bcp e Unicode para importar dados com um arquivo de formato não-XML ,Use uma tabela de preparo em que a primeira coluna seja um tipo de dados de caractere ou
Reexporte os dados e altere a ordem dos campos de dados para que o primeiro campo de dados seja 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 ouOPENROWSET. Para um comando bcp ou 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.
O formato de caractere Unicode é suportado pelas seguintes opções 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 ao importar dados em massa. |
OPENROWSET |
N/A | 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 Formatar arquivos para importar ou exportar dados (SQL Server).
Exemplo de condições de ensaio
Os exemplos neste artigo baseiam-se na tabela e no ficheiro de formato a seguir.
Tabela de exemplo
O script a seguir cria um banco de dados de teste, uma tabela nomeada myWidechar e preenche a tabela com alguns valores iniciais. Execute o seguinte Transact-SQL no 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;
Exemplo de arquivo de formato não-XML
O SQL Server oferece suporte a dois tipos de arquivo de formato: formato não XML e formato XML. O formato não XML é o formato original suportado por 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 format argumento e use nul em vez de um caminho de arquivo de dados. A opção de formato também requer a -f opção. Além disso, para este exemplo, o qualificador c é usado para especificar dados de caracteres e T é usado para especificar uma conexão confiável usando segurança integrada. Em um 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\feed de linha. Caso contrário, 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 formatam arquivos criados anteriormente.
Usar formato de caractere bcp e Unicode para exportar dados
-w switch e OUT comando. O arquivo de dados criado neste exemplo é usado em todos os exemplos subsequentes. Em um 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 switch e IN comando. Em um 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 utilizada, pois este exemplo envolve bcp, um arquivo de formato, caracter Unicode e o primeiro campo de dados no arquivo de dados não é um caractere. Consulte Considerações especiais sobre o uso do formato de caractere Unicode, bcp e um arquivo de formato anteriormente no artigo. O ficheiro de myWidechar.bcp dados é alterado pela adição de um registo extra como um registo "fictício", que é ignorado com a opção -F 2.
Em um 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
Utilize BULK INSERT e o formato de caractere Unicode sem um ficheiro de formato
DATAFILETYPE argumento. Execute o seguinte Transact-SQL no 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;
Utilize o BULK INSERT e o formato de caracteres Unicode com um ficheiro de formato não XML
FORMATFILE argumento. Execute o seguinte Transact-SQL no 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;
Utilize OPENROWSET e o formato de caractere Unicode com um arquivo de formato não XML
FORMATFILE argumento. Execute o seguinte Transact-SQL no 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;
Tarefas relacionadas
Para usar formatos de dados para importação ou exportação em massa
- Importar dados nativos e de formato de caractere de versões anteriores do SQL Server
- Usar formato de caractere para importar ou exportar dados (SQL Server)
- Usar formato nativo para importar ou exportar dados (SQL Server)
- Usar o formato nativo Unicode para importar ou exportar dados (SQL Server)