Utilitário bcp

O utilitário bcp copia dados em massa entre uma instância do Microsoft SQL Server e um arquivo de dados em um formato especificado pelo usuário. O utilitário bcp pode ser usado para importar um grande número de novas linhas para tabelas do SQL Server ou para exportar dados de tabelas para arquivos de dados. Exceto quando usado com a opção queryout, o utilitário não requer nenhum conhecimento de Transact-SQL. Para importar dados para uma tabela, você deve usar um arquivo de formato criado para aquela tabela ou entender a estrutura da tabela e os tipos de dados válidos para suas colunas.

Ícone de vínculo de tópico Para obter as convenções de sintaxe usadas para a sintaxe bcp, consulte convenções de sintaxe Transact-SQL (Transact-SQL).

ObservaçãoObservação

Se você usar bcp para fazer backup dos dados, crie um arquivo de formato para registrar o formato dos dados. Os arquivos de dados bcp não incluem nenhum esquema ou informações de formato, portanto, se uma tabela ou exibição for descartada e não tiver um arquivo de formato, não será possível importar os dados.

Sintaxe

        bcp {[[database_name.][schema].]{table_name | view_name} | "query"}
    {in | out | queryout | format} data_file
    [-mmax_errors] [-fformat_file] [-x] [-eerr_file]
    [-Ffirst_row] [-Llast_row] [-bbatch_size]
    [-ddatabase_name] [-n] [-c] [-N] [-w] [-V (70 | 80 | 90 )] 
    [-q] [-C { ACP | OEM | RAW | code_page } ] [-tfield_term] 
    [-rrow_term] [-iinput_file] [-ooutput_file] [-apacket_size]
    [-S [server_name[\instance_name]]] [-Ulogin_id] [-Ppassword]
    [-T] [-v] [-R] [-k] [-E] [-h"hint [,...n]"]

Argumentos

  • database_name
    É o nome do banco de dados no qual a tabela ou exibição especificada reside. Se não estiver especificado, esse será o banco de dados padrão do usuário.

    Você também pode especificar explicitamente o nome de banco de dados com -d.

  • owner
    É o nome do proprietário da tabela ou exibição. O ownerserá opcional, se o usuário que estiver executando a operação for o proprietário da tabela ou exibição especificada. Se o ownernão estiver especificado e o usuário que executa a operação não possuir a tabela ou exibição especificada, o SQL Server retornará uma mensagem de erro e a operação será cancelada.

  • table_name
    É o nome da tabela de destino ao importar dados no SQL Server (in) e da tabela de origem ao exportar dados do SQL Server (out).

  • view_name
    É o nome da exibição de destino ao copiar dados no SQL Server (in) e da exibição de origem ao copiar dados do SQL Server (out). Somente as exibições nas quais todas as colunas fazem referência à mesma tabela podem ser usadas como exibições de destino. Para obter mais informações sobre as restrições para copiar dados em exibições, consulte INSERT (Transact-SQL).

  • "query"
    É uma consulta Transact-SQL que retorna um conjunto de resultados. Se a consulta retornar vários conjuntos de resultados, como uma instrução SELECT que especifica uma cláusula COMPUTE, somente o primeiro conjunto de resultados será copiado no arquivo de dados e os conjuntos de resultados subsequentes serão ignorados. Coloque a consulta entre aspas duplas e qualquer coisa incorporada na consulta entre aspas simples. queryout também deverá ser especificado quando você copiar dados em massa de uma consulta.

    A consulta pode fazer referência a um procedimento armazenado desde que todas as tabelas referenciadas no procedimento armazenado existam antes da execução da instrução bcp. Por exemplo, se o procedimento armazenado gerar uma tabela temporária, ocorrerá uma falha com a instrução bcp, pois a tabela temporária ficará disponível somente em tempo de execução e não durante o tempo de execução da instrução. Nesse caso, considere a inserção do resultado do procedimento armazenado em uma tabela e, em seguida, usar bcp para copiar os dados da tabela para um arquivo de dados.

  • in | out| queryout | format
    Especifica a direção da cópia em massa, do seguinte modo:

    • in copia de um arquivo em uma tabela ou exibição de banco de dados.

    • out copia da tabela ou exibição de banco de dados para um arquivo. Se você especificar um arquivo existente, o arquivo será substituído. Ao extrair dados, observe que o utilitário bcp representa uma cadeia de caracteres vazia como nula e uma cadeia de caracteres nula como uma cadeia de caracteres vazia.

    • queryout copia de uma consulta e só deve ser especificado quando você copiar dados em massa de uma consulta.

    • format cria um arquivo de formato com base na opção especificada (-n, -c, -w ou -N) e nos delimitadores da tabela ou exibição. Quando você copia dados em massa, o comando bcp pode fazer referência a um arquivo de formato, o que evita a redigitação das informações de formato interativamente. A opção format requer a opção -f; a criação de um arquivo de formato XML também requer a opção -x. Para obter mais informações, consulte Criando um arquivo de formato.

  • data_file
    É o caminho completo do arquivo de dados. Quando dados são importados em massa para o SQL Server, o arquivo de dados contém os dados a serem copiados na tabela ou exibição especificada. Quando dados são exportados em massa do SQL Server, o arquivo de dados contém os dados copiados da tabela ou exibição. O caminho pode ter de 1 a 255 caracteres. O arquivo de dados pode conter no máximo 263 - 1 linhas.

    Observação importanteImportante

    Para a opção format, você deve especificar nul como o valor de data_file (formatnul).

  • -mmax_errors
    Especifica o número máximo de erros de sintaxe que podem ocorrer antes de a operação bcp ser cancelada. Um erro de sintaxe indica um erro de conversão de dados no tipo de dados de destino. O total max_errors exclui todos os erros que só podem ser detectados no servidor, como violações de restrição.

    Uma linha que não possa ser copiada pelo utilitário bcp é ignorada e é contada como um erro. Se essa opção não estiver incluída, o padrão será 10.

    ObservaçãoObservação

    A opção -m também não se aplica à conversão de money nem tipos de dados bigint.

  • -fformat_file
    Especifica o caminho completo de um arquivo de formato. O significado dessa opção depende do ambiente no qual é usada, do seguinte modo:

    • Se -f for usado com a opção format, o format_file especificado será criado para a tabela ou exibição especificada. Para criar um arquivo de formato XML, especifique também a opção -x. Para obter mais informações, consulte Criando um arquivo de formato.

    • Se usado com a opção in ou out, -f requer um arquivo de formato existente.

      ObservaçãoObservação

      É opcional usar um arquivo de formato in com a opçãoin ou out. Na ausência da opção -f, se -n, -c, -w ou -N não forem especificados, o comando solicitará informações de formato e permitirá que você salve suas respostas em um arquivo de formato (cujo nome de arquivo padrão é Bcp.fmt).

    Se format_file começar com um hífen (-) ou uma barra (/), não inclua um espaço entre -f e o nome format_file.

  • -x
    Usado com as opções format e -fformat_file, gera um arquivo de formato com base em XML, em vez do arquivo de formato padrão não XML. O -x não funciona ao importar ou exportar dados. Ele gera um erro se usado sem format e sem -fformat_file.

    ObservaçãoObservação

    Para usar a opção -x, você deve estar usando um cliente bcp 10.0. Para obter mais informações sobre como usar o cliente bcp 10.0, consulte "Comentários", mais adiante neste tópico.

  • -eerr_file
    Especifica o caminho completo de um arquivo de erro usado para armazenar todas as linhas que o utilitário bcp não puder transferir do arquivo para o banco de dados. As mensagens de erro do comando bcp vão para a estação de trabalho do usuário. Se essa opção não for usada, o arquivo de erros não será criado.

    Se err_file começar com um hífen (-) ou uma barra (/), não inclua um espaço entre -e e o nome err_file.

  • -Ffirst_row
    Especifica o número da primeira linha a exportar de uma tabela ou a importar de um arquivo de dados. Esse parâmetro requer um valor maior que (>) 0, mas menor que (<) ou igual ao (=) número total de linhas. Na ausência desse parâmetro, o padrão é a primeira linha do arquivo.

    first_row pode ser um inteiro positivo com um valor de até 2^63-1. -Ffirst_row é baseado em 1.

  • -Llast_row
    Especifica o número da última linha a ser exportada de uma tabela ou importada de um arquivo de dados. Esse parâmetro exige um valor maior que (>) 0, mas menor que (<) ou igual ao (=) número da última linha. Na ausência desse parâmetro, o padrão é a última linha do arquivo.

    last_row pode ser um inteiro positivo com um valor de até 2^63-1.

  • -bbatch_size
    Especifica o número de linhas por lote de dados importados. Cada lote é importado e registrado como uma transação separada que importa o lote inteiro antes de ser confirmado. Por padrão, todas as linhas no arquivo de dados são importadas como um lote. Para distribuir as linhas entre vários lotes, especifique um batch_size que seja menor que o número de linhas no arquivo de dados. Se a transação apresentar falha para qualquer lote, somente as inserções do lote atual serão revertidas. Lotes já importados por transações confirmadas não serão afetados por uma falha posterior.

    Não use essa opção junto com a opção **-h"**ROWS_PER_BATCH =bb".

    Para obter mais informações, consulte Gerenciando lotes para importar em massa.

  • -ddatabase_name
    Especifica o banco de dados ao qual se conectar. Por padrão, bcp.exe se conecta ao banco de dados padrão do usuário.

    Um erro ocorrerá se -ddatabase_name for especificado junto com um nome de três partes (database_name.schema.table, que é passado como o primeiro parâmetro para bcp.exe). Isso ocorre porque você não pode especificar o nome de banco de dados duas vezes.

    Se database_name começar com um hífen (-) ou uma barra (/), não adicione um espaço entre -d e o nome do banco de dados.

  • -n
    Executa a operação de cópia em massa usando os tipos de dados nativos (banco de dados) dos dados. Essa opção não solicita informações para cada campo; ela usa os valores nativos.

    Para obter mais informações, consulte Usando formato nativo para importar ou exportar dados.

  • -c
    Executa a operação usando um tipo de dados de caractere. Essa opção não solicita informações para cada campo; ela usa char como o tipo de armazenamento, sem prefixos e com \t (caractere de tabulação) como separador de campos e \r\n (caractere de nova linha) como terminador de linha.

    Para obter mais informações, consulte Usando formato de caractere para importar ou exportar dados.

  • -N
    Executa a operação de cópia em massa usando os tipos de dados nativos (banco de dados) para dados que não sejam de caracteres, e caracteres Unicode para dados de caracteres. Essa opção oferece um desempenho mais elevado alternativo à opção -w e deve ser usada para transferir dados de uma instância do SQL Server para outra usando um arquivo de dados. Ela não solicita informações para cada campo. Use essa opção quando estiver transferindo dados que contenham caracteres estendidos ANSI e quiser aproveitar o desempenho do modo nativo.

    Para obter mais informações, consulte Usando o formato nativo Unicode para importar ou exportar dados.

    A partir do SQL Server 2005 SP1, se você exportar e importar dados para o mesmo esquema de tabela usando o bcp.exe com - N, poderá ver um aviso de truncamento se houver uma coluna de caracteres não Unicode de comprimento fixo (por exemplo, char(10)).

    O aviso poderá ser ignorado. Um modo de resolver esse aviso é usar -n em vez de -N.

  • -w
    Executa a operação de cópia em massa usando caracteres Unicode. Essa opção não solicita informações para cada campo; ela usa nchar como o tipo de armazenamento, sem prefixos, \t (caractere de tabulação) como separador de campos e \n (caractere de nova linha) como terminador de linha.

    Para obter mais informações, consulte Uso do formato de caractere Unicode para importar ou exportar dados.

  • -V (70 | 80 | 90 )
    Executa a operação de cópia em massa usando os tipos de dados de uma versão anterior do SQL Server. Essa opção não solicita informações para cada campo; ela usa os valores padrão.

    70 = SQL Server 7.0

    80 = SQL Server 2000

    90 = SQL Server 2005

    Por exemplo, para gerar dados para tipos que não tenham suporte no SQL Server 7.0, mas que foram introduzidos em versões posteriores do SQL Server (por exemplo, bigint, sql_variant e xml), use a opção -V70.

    Para obter mais informações, consulte Importando dados de formato de caractere e nativo de versões anteriores do SQL Server.

  • -q
    Executa a instrução SET QUOTED_IDENTIFIERS ON na conexão entre o utilitário bcp e uma instância do SQL Server. Use essa opção para especificar um nome de banco de dados, proprietário, tabela ou exibição que contenha um espaço ou aspas simples. Inclua todo o nome da tabela de três partes ou da exibição entre aspas duplas ("").

    Para especificar um nome de banco de dados que contenha um espaço ou aspas simples, você deve usar a opção –q.

    -q não se aplica a valores passados para -d.

    Para obter mais informações, consulte Comentários mais adiante neste tópico.

  • -C { ACP | OEM | RAW | code_page }
    Especifica a página de código dos dados no arquivo de dados. code_page será relevante somente se os dados contiverem colunas char, varchar ou text com valores de caracteres superiores a 127 ou inferiores a 32.

    ObservaçãoObservação

    Recomendamos que você especifique um nome de agrupamento para cada coluna em um arquivo de formato.

    Valor da página de código

    Descrição

    ACP

    ANSI/Microsoft Windows (ISO 1252).

    OEM

    Página de código padrão usada pelo cliente. Essa é a página de código padrão usada se -C não for especificado.

    RAW

    Não ocorre nenhuma conversão de uma página de código para outra. Essa é a opção mais rápida porque não ocorre nenhuma conversão.

    code_page

    Um número de página de código específico, por exemplo, 850.

    Observação importanteImportante
    O SQL Server não suporta a página de código 65001 (codificação UTF-8).

    Para obter mais informações, consulte Copiando dados entre agrupamentos diferentes.

  • -tfield_term
    Especifica o terminador de campo. O padrão é \t (caractere de tabulação). Use esse parâmetro para substituir o terminador de campo padrão. Para obter mais informações, consulte Especificando terminadores de campo e linha.

    Se você especificar o terminador de campo em notação hexadecimal em um comando bcp.exe, o valor será truncado em 0x00. Por exemplo, se você especificar 0x410041, 0x41 será usado.

    Se field_term começar com um hífen (-) ou uma barra (/), não inclua um espaço entre -t e o valor field_term.

  • -rrow_term
    Especifica o terminador de linha. O padrão é \n (caractere de nova linha). Use esse parâmetro para substituir o terminador de linha padrão. Para obter mais informações, consulte Especificando terminadores de campo e linha.

    Se você especificar o terminador de linha em notação hexadecimal em um comando bcp.exe, o valor será truncado em 0x00. Por exemplo, se você especificar 0x410041, 0x41 será usado.

    Se row_term começar com um hífen (-) ou uma barra (/), não inclua um espaço entre -r e o valor row_term.

  • -iinput_file
    Especifica o nome de um arquivo de resposta que contém as respostas às perguntas do prompt de comando para cada campo de dados quando uma cópia em massa está sendo executada com o uso do modo interativo (-n, -c, -w ou -N não especificados).

    Se input_file começar com um hífen (-) ou uma barra (/), não inclua um espaço entre -i e o nome input_file.

  • -ooutput_file
    Especifica o nome de um arquivo que recebe a saída redirecionada do prompt de comando.

    Se output_file começar com um hífen (-) ou uma barra (/), não inclua um espaço entre -o e o nome output_file.

  • -apacket_size
    Especifica o número de bytes por pacote de rede enviado para o servidor e enviado por ele. A opção de configuração do servidor pode ser definida usando-se o SQL Server Management Studio (ou o procedimento armazenado do sistema sp_configure). Contudo, a opção de configuração do servidor pode ser substituída individualmente usando-se esta opção. packet_size pode ser de 4096 a 65535 bytes, e o padrão é 4096.

    Um tamanho de pacote maior pode aumentar o desempenho de operações de cópia em massa. Se um pacote maior for solicitado mas não puder ser concedido, o padrão será usado. As estatísticas de desempenho geradas pelo utilitário bcp mostram o tamanho de pacote usado.

  • -Sserver_name[ **\instance_name]
    Especifica uma instância do SQL Server à qual se conectar. Se nenhum servidor for especificado, o utilitário bcp se conectará à instância padrão do SQL Server no computador local. Essa opção é necessária quando um comando bcp é executado de um computador remoto na rede ou de uma instância local nomeada. Para se conectar à instância padrão do SQL Server em um servidor, especifique apenas o server_name. Para conectar-se a uma instância nomeada do SQL Server, especifique server_name
    \**instance_name.

  • -Ulogin_id
    Especifica a ID de logon usada para conectar-se ao SQL Server.

    Observação sobre segurançaObservação sobre segurança

    Quando o utilitário bcp está se conectando ao SQL Server com uma conexão confiável usando segurança integrada, use a opção -T (conexão confiável) em vez da combinação user name e password.

  • -Ppassword
    Especifica a senha para a ID de logon. Se essa opção não for usada, o comando bcp solicitará uma senha. Se essa opção for usada ao término do prompt de comando sem uma senha, o bcp usará a senha padrão (NULL).

    Observação sobre segurançaObservação sobre segurança

    Não use uma senha em branco. Use uma senha forte.

    Para mascarar a senha, não especifique a opção -P junto com a opção -U. Em vez disso, depois de especificar o bcp junto com a opção -U e outras opções (não especificar -P), pressione ENTER, e o comando solicitará uma senha. Esse método garante que sua senha será mascarada quando for inserida.

    Se password começar com um hífen (-) ou uma barra (/), não adicione um espaço entre -P e password.

  • -T
    Especifica que o utilitário bcp conecta-se ao SQL Server com uma conexão confiável usando segurança integrada. As credenciais de segurança do usuário de rede, login_id e password, não são requeridas. Se –T não for especificada, será necessário especificar –U e –P para ter êxito no logon.

  • -v
    Informa o número de versão e copyright do utilitário bcp.

  • -R
    Especifica que dados de moeda, data e horário são copiados em massa no SQL Server usando o formato regional definido para as configurações de localidade do computador cliente. Por padrão, as configurações regionais são ignoradas.

  • -k
    Especifica que colunas vazias devem reter um valor nulo durante a operação, em vez de qualquer valor padrão nas colunas inseridas. Para obter mais informações, consulte Mantendo valores nulos ou usando valores padrão durante a importação em massa.

  • -E
    Especifica que o valor, ou valores, de identidade no arquivo de dados importado deve ser usado para a coluna de identidade. Se -E não for fornecido, os valores de identidade para essa coluna no arquivo de dados que está sendo importado serão ignorados e o SQL Server atribuirá automaticamente valores exclusivos com base nos valores semente e de incremento especificados durante a criação da tabela.

    Se o arquivo de dados não contiver valores para a coluna de identidade na tabela ou exibição, use um arquivo de formato para especificar que a coluna de identidade na tabela ou exibição deve ser ignorada ao importar dados. O SQL Server atribui valores exclusivos para a coluna automaticamente. Para obter mais informações, consulte DBCC CHECKIDENT (Transact-SQL).

    A opção -E tem um requisito de permissões especial. Para obter mais informações, consulte "Comentários" mais adiante neste tópico.

    Para obter mais informações sobre como manter valores de identificação, consulte Mantendo valores de identidade ao importar em massa dados.

  • **-h"**hint[ ,... n] "
    Especifica a dica ou dicas a serem usadas durante uma importação de dados em massa para uma tabela ou exibição.

    • ORDER**(column[ASC | DESC] [,...n])**
      A ordem de classificação dos dados no arquivo de dados. O desempenho da importação em massa será melhorado se os dados importados forem armazenados de acordo com o índice clusterizado na tabela, se houver. Se o arquivo de dados for armazenado em uma ordem diferente, ou seja, distinta da ordem de uma chave de índice clusterizado, ou se não houver nenhum índice clusterizado na tabela, a cláusula ORDER será ignorada. Os nomes de coluna fornecidos devem ser nomes válidos na tabela de destino. Por padrão, bcp supõe que o arquivo de dados não esteja classificado. Para obter uma importação em massa otimizada, o SQL Server também valida que os dados importados sejam classificados.

      Para obter mais informações, consulte Controlando a ordem de classificação durante a importação em massa de dados.

    • ROWS_PER_BATCH **=**bb
      Número de linhas de dados por lote (como bb). Usado quando -b não é especificado, resulta no envio de todo o arquivo de dados ao servidor como uma transação única. O servidor otimiza o carregamento em massa de acordo com o valor bb. Por padrão, ROWS_PER_BATCH é desconhecido.

      Para obter mais informações, consulte Gerenciando lotes para importar em massa.

    • KILOBYTES_PER_BATCH = cc
      Número aproximado de quilobytes de dados por lote (como cc). Por padrão, KILOBYTES_PER_BATCH é desconhecido.

      Para obter mais informações, consulte Gerenciando lotes para importar em massa.

    • TABLOCK
      Especifica que um bloqueio no nível de tabela de atualização em massa seja adquirido durante a operação de carregamento em massa, caso contrário, seja adquirido um bloqueio no nível de linha. Essa dica melhora significativamente o desempenho, pois manter um bloqueio durante a operação de cópia em massa reduz a contenção de bloqueio na tabela. Uma tabela pode ser carregada simultaneamente por vários clientes se não tiver nenhum índice e TABLOCK for especificado. Por padrão, o comportamento de bloqueio é determinado pela opção de tabela table lock on bulk load.

      Para obter mais informações, consulte Controlando o comportamento de bloqueio para a importação em massa.

    • CHECK_CONSTRAINTS
      Especifica que todas as restrições na tabela ou exibição de destino devem ser verificadas durante a operação de importação em massa. Sem a dica CHECK_CONSTRAINTS, todas as restrições CHECK e FOREIGN KEY são ignoradas e, depois da operação, a restrição na tabela é marcada como não confiável.

      ObservaçãoObservação

      As restrições UNIQUE, PRIMARY KEY e NOT NULL são sempre impostas.

      Em algum momento, você precisará verificar as restrições em toda a tabela. Se a tabela não estava vazia antes da operação de importação em massa, o custo de revalidação da restrição poderá exceder o custo da aplicação de restrições CHECK aos dados incrementais. Portanto, recomendamos que normalmente você habilite a verificação de restrições durante uma importação incremental em massa.

      Uma situação em que talvez convenha desabilitar as restrições (o comportamento padrão) é quando os dados de entrada contiverem linhas que violam restrições. Com as restrições CHECK desabilitadas, é possível importar os dados e usar instruções Transact-SQL para remover os dados inválidos.

      ObservaçãoObservação

      Agora, o bcp impõe validação de dados e verificações de dados que podem provocar falhas em scripts se forem executados em dados inválidos em um arquivo de dados.

      ObservaçãoObservação

      A opção -mmax_errors não se aplica à verificação de restrição.

      Para obter mais informações, consulte Controlando verificação de restrição por operações de importação em massa.

    • FIRE_TRIGGERS
      Especificados com o argumento in, todos os gatilhos de inserção definidos na tabela de destino serão executados durante a operação de cópia em massa. Se FIRE_TRIGGERS não for especificado, nenhum gatilho de inserção será executado. FIRE_TRIGGERS é ignorado para os argumentos out, queryout e format.

      Para obter mais informações, consulte Controlando execução do gatilho ao importar dados em massa.

Comentários

O cliente bcp 10.0 é instalado quando você instala as ferramentas do Microsoft SQL Server 2008 R2. Se as ferramentas forem instaladas para o SQL Server 2008 R2 e o SQL Server 2005, dependendo do valor da variável de ambiente PATH, talvez você esteja usando o cliente bcp anterior, em vez do cliente bcp 10.0. Essa variável de ambiente define o conjunto de diretórios usado pelo Windows para procurar arquivos executáveis. Para descobrir qual versão você está usando, execute o comando bcp /v no prompt de comando do Windows. Para obter mais informações sobre como definir o caminho de comando na variável de ambiente PATH, consulte a Ajuda do Windows.

Os arquivos de formato XML só têm suporte quando as ferramentas do SQL Server são instaladas junto com o SQL Server Native Client.

Para obter informações sobre onde encontrar ou como executar o utilitário bcp e sobre as convenções de sintaxe dos utilitários de prompt de comando, consulte Utilitários do prompt de comando.

Para obter informações sobre como preparar dados para operações de importação ou exportação em massa, consulte Preparando dados para exportar ou importar em massa.

Para obter informações sobre quando as operações de inserção de linhas executadas por importações em massa são registradas no log de transações, consulte Pré-requisitos para log mínimo em importação em massa.

Suporte de arquivos de dados nativos

No SQL Server 2008 R2, o utilitário bcp dá suporte para arquivos de dados nativos compatíveis com SQL Server 2000, SQL Server 2005, SQL Server 2008 e SQL Server 2008 R2 somente.

Colunas computadas e colunas de carimbo de data/hora

Os valores no arquivo de dados sendo para computado ou colunas timestamp são ignorados e o SQL Server atribui valores automaticamente. Se o arquivo de dados não contiver valores para as colunas computadas ou de timestamp na tabela, use um arquivo de formato para especificar que as colunas computadas ou timestamp na tabela devem ser ignoradas na importação dados; o SQL Server automaticamente atribuirá valores para a coluna.

Colunas computadas e de timestamp são copiadas em massa do SQL Server em um arquivo de dados, como sempre.

Especificando identificadores que contêm espaços ou aspas

Os identificadores do SQL Server podem incluir caracteres, como espaços incorporados e aspas. Tais identificadores devem ser tratados do seguinte modo:

  • Quando você especificar um identificador ou nome de arquivo que inclua um espaço ou aspas no prompt de comando, coloque o identificador entre aspas ("").

    Por exemplo, o comando bcp out a seguir cria um arquivo de dados nomeado Currency Types.dat:

    bcp AdventureWorks2008R2.Sales.Currency out "Currency Types.dat" -T -c
    
  • Para especificar um nome de banco de dados que contenha um espaço ou aspas, você deve usar a opção -q.

  • Para nomes de proprietário, tabela ou exibição que contenham espaços incorporados ou aspas, você também pode:

    • Especificar a opção -q ou

    • Inserir o nome de proprietário, tabela ou exibição entre colchetes ([]) dentro das aspas.

Validação de dados

Agora, o bcp impõe validação de dados e verificações de dados que podem provocar falhas em scripts se forem executados em dados inválidos em um arquivo de dados. Por exemplo, o bcp agora verifica se:

  • A representação nativa de tipos de dados float ou real é válida.

  • Dados Unicode têm um comprimento regular de byte.

Formas de dados inválidos que podiam ser importadas em massa em versões anteriores do SQL Server podem falhar ao serem carregadas agora; enquanto em versões anteriores a falha só ocorria quando um cliente tentava acessar os dados inválidos. A validação adicional minimiza as surpresas ao consultar os dados depois do carregamento em massa.

Exportando ou importando documentos SQLXML em massa

Para exportar ou importar dados SQLXML em massa, use um dos tipos de dados a seguir em seu arquivo de formato.

Tipo de dados

Efeito

SQLCHAR ou SQLVARYCHAR

Os dados são enviados na página de código do cliente ou na página de código indicada pelo agrupamento. O efeito é o mesmo que especificar a opção -c sem especificar um arquivo de formato.

SQLNCHAR ou SQLNVARCHAR

Os dados são enviados como Unicode. O efeito é o mesmo que especificar a opção -w sem especificar um arquivo de formato.

SQLBINARY ou SQLVARYBIN

Os dados são enviados sem qualquer conversão.

Permissões

Uma operação bcp out requer permissão SELECT na tabela de origem.

Uma operação bcp in requer no mínimo permissões SELECT/INSERT na tabela de destino. Além disso, a permissão ALTER TABLE será necessária se qualquer das seguintes afirmações for verdadeira:

  • Existem restrições e a dica CHECK_CONSTRAINTS não foi especificada.

    ObservaçãoObservação

    Desabilitar restrições é o comportamento padrão. Para habilitar restrições explicitamente, use a opção -h com a dica CHECK_CONSTRAINTS.

  • Existem gatilhos e a dica FIRE_TRIGGER não foi especificada.

    ObservaçãoObservação

    Por padrão, os gatilhos não são disparados. Para disparar gatilhos explicitamente, use a opção -h com a dica FIRE_TRIGGERS.

  • Você usa a opção -E para importar valores de identidade de um arquivo de dados.

ObservaçãoObservação

A exigência da permissão ALTER TABLE na tabela de destino era nova no SQL Server 2005. Essa nova exigência poderia fazer os scripts bcp que não impusessem verificações de gatilhos e de restrições falharem se a conta do usuário não tiver permissões ALTER TABLE para a tabela de destino.

Práticas recomendadas do modo de caractere (-c) e o modo nativo (-n)

Esta seção tem recomendações para o modo de caractere (-c) e o modo nativo (-n).

  • (Administrador/usuário) Quando possível, use formato nativo (-n) para evitar o problema do separador. Use o formato nativo para exportar e importar usando o SQL Server. Exporte dados do SQL Server usando a opção -c ou -w se os dados serão importados para um banco de dados que não seja do SQL Server.

  • (Administrador) Verifique os dados ao usar BCP OUT. Por exemplo, ao usar BCP OUT, BCP IN e BCP OUT, verifique se os dados foram exportados corretamente e se os valores do terminador não são usados como parte de algum valor de dados. Substitua os terminadores padrão (usando as opções -t e -r) com valores hexadecimais aleatórios para evitar conflitos entre valores de terminador e valores de dados.

  • (Usuário) Use um terminador longo e exclusivo (qualquer sequência de bytes ou caracteres) para minimizar a possibilidade de conflito com o valor real da cadeia de caracteres. Isto pode ser feito usando as opções -t e -r.

Exemplos

Esta seção contém os seguintes exemplos:

  • A. Copiando linhas de tabela em um arquivo de dados (com uma conexão confiável)

  • B. Copiando linhas de tabela em um arquivo de dados (com autenticação mista)

  • C. Copiando dados de um arquivo em uma tabela

  • D. Copiando uma coluna específica em um arquivo de dados

  • E. Copiando uma linha específica em um arquivo de dados

  • F. Copiando dados de uma consulta em um arquivo de dados

  • G. Criando um arquivo de formato não XML

  • H. Criando um arquivo de formato XML

  • I. Usando um arquivo de formato para importação em massa com bcp

A. Copiando linhas de tabela em um arquivo de dados (com uma conexão confiável)

O exemplo a seguir ilustra a opção out na tabela AdventureWorks2008R2.Sales.Currency. Este exemplo cria um arquivo de dados denominado Currency.dat e copia os dados da tabela nesse arquivo usando formato de caractere. O exemplo presume que você esteja usando autenticação do Windows e tenha uma conexão confiável com a instância do servidor na qual está executando o comando bcp.

No prompt de comando, digite o seguinte comando:

bcp AdventureWorks2008R2.Sales.Currency out Currency.dat -T -c

B. Copiando linhas de tabela em um arquivo de dados (com autenticação mista)

O exemplo a seguir ilustra a opção out na tabela Sales.Currency. Este exemplo cria um arquivo de dados denominado Currency.dat e copia os dados da tabela nesse arquivo usando formato de caractere.

O exemplo pressupõe que você esteja usando autenticação mista; você deve usar a opção -U para especificar sua ID de logon. Além disso, a menos que você esteja se conectando à instância padrão do SQL Server no computador local, use a opção -S para especificar o nome do sistema e, opcionalmente, um nome de instância.

bcp AdventureWorks2008R2.Sales.Currency out Currency.dat -c -U<login_id> -S<server_name\instance_name>

O sistema solicitará sua senha.

C. Copiando dados de um arquivo para uma tabela

O exemplo a seguir ilustra a opção in usando o arquivo criado no exemplo anterior (Currency.dat). Porém, primeiro este exemplo cria uma cópia vazia da tabela Sales.Currency, Sales.Currency2, na qual os dados são copiados. O exemplo presume que você esteja usando autenticação do Windows e tenha uma conexão confiável com a instância do servidor na qual está executando o comando bcp.

Para criar a tabela vazia, execute o seguinte código no Editor de Consultas:

USE AdventureWorks2008R2;
GO
SELECT * INTO AdventureWorks2008R2.Sales.Currency2 
FROM AdventureWorks2008R2.Sales.Currency WHERE 1=2

Para copiar em massa os dados de caractere na nova tabela, isto é, para importar os dados, insira o comando a seguir no prompt de comando:

bcp AdventureWorks2008R2.Sales.Currency2 in Currency.dat -T -c

Para verificar se o comando teve sucesso, exiba o conteúdo da tabela no Editor de Consultas e digite:

USE AdventureWorks2008R2;
GO
SELECT * FROM Sales.Currency2;

D. Copiando uma coluna específica em um arquivo de dados

Para copiar uma coluna específica, você pode usar a opção queryout. O exemplo a seguir copia apenas a coluna Name da tabela Sales.Currency em um arquivo de dados. O exemplo presume que você esteja usando autenticação do Windows e tenha uma conexão confiável com a instância do servidor na qual está executando o comando bcp.

No prompt de comando do Windows, digite:

bcp "SELECT Name FROM AdventureWorks2008R2.Sales.Currency" queryout Currency.Name.dat -T -c

E. Copiando uma linha específica em um arquivo de dados

Para copiar uma linha específica, você pode usar a opção queryout. O exemplo a seguir copia apenas a linha para o contato denominado Jarrod Rana da tabela Person.Person em um arquivo de dados (Jarrod Rana.dat).O exemplo presume que você esteja usando autenticação do Windows e tenha uma conexão confiável com a instância do servidor na qual está executando o comando bcp.

No prompt de comando do Windows, digite:

bcp "SELECT * FROM AdventureWorks2008R2.Person.Person WHERE FirstName='Jarrod' AND LastName='Rana' "  queryout "Jarrod Rana.dat" -T -c

F. Copiando dados de uma consulta em um arquivo de dados

Para copiar o conjunto de resultados de uma instrução Transact-SQL em um arquivo de dados, use a opção queryout. O exemplo a seguir copia os nomes da tabela AdventureWorks2008R2.Person.Person, classificados pelo sobrenome e depois pelo prenome, no arquivo de dados Contacts.txt. O exemplo presume que você esteja usando autenticação do Windows e tenha uma conexão confiável com a instância do servidor na qual está executando o comando bcp.

No prompt de comando do Windows, digite:

bcp "SELECT FirstName, LastName FROM AdventureWorks2008R2.Person.Person ORDER BY LastName, Firstname" queryout Contacts.txt -c -T

G. Criando um arquivo de formato não-XML

O exemplo a seguir cria um arquivo de formato não XML, Currency.fmt, para a tabela Sales.Currency no banco de dados AdventureWorks2008R2. O exemplo presume que você esteja usando autenticação do Windows e tenha uma conexão confiável com a instância do servidor na qual está executando o comando bcp.

No prompt de comando do Windows, digite:

bcp AdventureWorks2008R2.Sales.Currency format nul -T -c  -f Currency.fmt

Para obter mais informações, consulte Compreendendo arquivos de formato não XML.

H. Criando um arquivo de formato XML

O exemplo a seguir cria um arquivo de formato XML denominado Currency.xml para a tabela Sales.Currency no banco de dados AdventureWorks2008R2. O exemplo presume que você esteja usando autenticação do Windows e tenha uma conexão confiável com a instância do servidor na qual está executando o comando bcp.

No prompt de comando do Windows, digite:

bcp AdventureWorks2008R2.Sales.Currency format nul -T -c -x -f Currency.xml
ObservaçãoObservação

Para usar a opção -x, você deve estar usando um cliente bcp 9.0. Para obter informações sobre como usar o cliente bcp 9.0, consulte "Comentários", mais adiante neste tópico.

Para obter mais informações, consulte Compreendendo arquivos no formato XML.

I. Usando um arquivo de formato para importação em massa com bcp

Para usar um arquivo de formato criado anteriormente ao importar dados para uma instância do SQL Server, use a opção -f com a opção in. Por exemplo, o comando a seguir copia em massa os conteúdos de um arquivo de dados, Currency.dat, em uma cópia da tabela Sales.Currency (Sales.Currency2) usando o arquivo de formato criado anteriormente (Currency.xml). O exemplo presume que você esteja usando autenticação do Windows e tenha uma conexão confiável com a instância do servidor na qual está executando o comando bcp.

No prompt de comando do Windows, digite:

bcp AdventureWorks2008R2.Sales.Currency2 in Currency.dat -T -f Currency.xml
ObservaçãoObservação

Os arquivos de formato são úteis quando os campos do arquivo de dados são diferentes das colunas da tabela, por exemplo, em seu número, classificação ou tipos de dados. Para obter mais informações, consulte Arquivos de formato para importação ou exportação de dados.