Importando dados de formato de caractere e nativo de versões anteriores do SQL Server

Para usar o bcp para importar dados de formato de caractere e nativo do Microsoft SQL Server 2005 ou versões anteriores, use a opção - V. Quando a opção -V é especificada, o SQL Server 2008 R2 usa tipos de dados de versões anteriores do Microsoft SQL Server, e o formato de arquivo de dados será o mesmo que o da versão anterior.

Para especificar se o arquivo de dados está no nível de uma versão anterior do SQL Server, use a opção -V como segue:

Versão do SQL Server

Qualificador

SQL Server 7.0

-V70

SQL Server 2000

-V80

SQL Server 2005

-V90

Interpretação de tipos de dados do SQL Server

O SQL Server 2005 e versões posteriores oferecem suporte para alguns novos tipos. Para importar um novo tipo de dados para uma versão anterior, o tipo de dados deve ser armazenado em um formato legível pelos clientes bcp antigos. A tabela a seguir resume como os novos tipos de dados do SQL Server 2005 são convertidos para compatibilidade com versões anteriores do SQL Server.

Novos tipos de dados no SQL Server 2005

Tipos de dados compatíveis na versão 6x

Tipos de dados compatíveis na versão 70

Tipos de dados compatíveis na versão 80

bigint

decimal

decimal

*

sql_variant

text

nvarchar(4000)

*

varchar(max)

text

text

text

nvarchar(max)

ntext

ntext

ntext

varbinary(max)

image

image

image

XML

ntext

ntext

ntext

UDT1

image

image

image

* Esse tipo tem suporte nativo.

1 UDT indica um tipo definido pelo usuário.

Exportando do SQL Server 2005 e versões posteriores

Quando você exporta dados em massa usando a opção –V80 do SQL Server 2005 ou versões posteriores e nvarchar(max), varchar(max), varbinary(max), XML e UDT, dados no modo nativo são armazenados com um prefixo de 4 bytes, como dados text, image e ntext, em vez de um prefixo de 8 bytes, que é o padrão do SQL Server 2005 e versões posteriores.

Exportando do SQL Server 7.0 ou SQL Server 2000

Ao exportar dados em massa do SQL Server 7.0 ou SQL Server 2000, considere o seguinte:

  • No SQL Server 7.0 e SQL Server 2000, o valor 0 representa uma coluna de comprimento zero.

  • O formato de armazenamento para dados bigint exportados do SQL Server 7.0 depende do formato de dados do arquivo de dados:

    • No modo nativo ou arquivo de dados de formato nativo Unicode, os dados bigint são armazenados como decimal(19,0).

    • No modo de caractere ou arquivo de dados de formato de caracteres Unicode, os dados bigint são armazenados como um caractere ou uma cadeia de caracteres [-]digits(por exemplo, -25688904432).

Copiando valores de dados

Começando com o SQL Server 7.0, o bcp usa o API de cópia em massa ODBC. Portanto, para importar valores de data no SQL Server 7.0 ou versões posteriores, o bcp usa o formato de dados ODBC (yyyy-mm-dd hh:mm:ss[.f...]).

O comando bcp exporta arquivos de dados de formato de caractere usando o formato padrão ODBC para os valores datetime e smalldatetime. Por exemplo, uma coluna datetime que contém a data 12 Aug 1998 é copiada em massa em um arquivo de dados como a cadeia de caracteres 1998-08-12 00:00:00.000.

Observação importanteImportante

Ao importar dados em um campo smalldatetime com o bcp, verifique se o valor por segundo é 00.000; caso contrário a operação falhará. O tipo de dados smalldatetime só mantém valores do minuto mais próximo. BULK INSERT e INSERT ... SELECT * FROM OPENROWSET(BULK...) não falharão nessa instância, mas truncarão o valor de segundos.