Compartilhar via


bcp_setcolfmt

A função bcp_setcolfmt substitui o bcp_colfmt. Ao especificar a ordenação de coluna, a função bcp_setcolfmt deve ser usada. bcp_setbulkmode pode ser usado para especificar mais de um formato de coluna.

Essa função fornece uma abordagem flexível para especificar o formato de coluna em uma operação de cópia em massa. Ele é usado para definir atributos de formato de coluna individuais. Cada chamada para bcp_setcolfmt define um atributo de formato de coluna.

A função bcp_setcolfmt especifica o formato de origem ou destino dos dados em um arquivo de usuário. Quando usado como um formato de origem, bcp_setcolfmt especifica o formato de um arquivo de dados existente usado como fonte de dados em uma cópia em massa para uma tabela no SQL Server. Quando usado como um formato de destino, o arquivo de dados é criado usando os formatos de coluna especificados com bcp_setcolfmt.

Sintaxe

  
RETCODE bcp_setcolfmt (  
HDBC   
hdbc  
,  
INT   
field  
,  
INT   
property  
,  
void*   
pValue  
,  
INT   
cbValue  
);  
  

Argumentos

hdbc
É o identificador de conexão ODBC habilitado para cópia em massa.

campo
É o número da coluna ordinal para o qual a propriedade está sendo definida.

propriedade
É uma das constantes de propriedade. As constantes de propriedade são definidas nesta tabela.

Propriedade Valor Descrição
BCP_FMT_TYPE BYTE É o tipo de dados desta coluna no arquivo de usuário. Se diferente do tipo de dados da coluna correspondente na tabela de banco de dados, a cópia em massa converterá os dados, se possível.

O parâmetro BCP_FMT_TYPE é enumerado pelos tokens de tipo de dados do SQL Server em sqlncli.h, em vez dos enumeradores de tipo de dados ODBC C. Por exemplo, você pode especificar uma cadeia de caracteres, tipo ODBC SQL_C_CHAR, usando o tipo SQLCHARACTER específico do SQL Server.

Para especificar a representação de dados padrão para o tipo de dados do SQL Server, defina esse parâmetro como 0.

Para uma cópia em massa do SQL Server em um arquivo, quando BCP_FMT_TYPE for SQLDECIMAL ou SQLNUMERIC:

- Se a coluna de origem não for decimal ou numérica, a precisão e a escala padrão serão usadas.
- Se a coluna de origem for decimal ou numérica, a precisão e a escala da coluna de origem serão usadas.
BCP_FMT_INDICATOR_LEN INT É o comprimento em bytes do indicador (prefixo).

É o comprimento, em bytes, de um indicador de comprimento/nulo dentro dos dados da coluna. Os valores válidos de comprimento do indicador são 0 (ao usar nenhum indicador), 1, 2 ou 4.

Para especificar o uso padrão do indicador de cópia em massa, defina esse parâmetro como SQL_VARLEN_DATA.

Os indicadores aparecem na memória diretamente antes de qualquer dado e no arquivo de dados diretamente antes dos dados aos quais eles se aplicam.

Se mais de um meio de especificar um comprimento de coluna de arquivo de dados for usado (como um indicador e um tamanho máximo de coluna, ou um indicador e uma sequência de terminador), a cópia em massa escolherá aquela que resulta na menor quantidade de dados sendo copiados.

Os arquivos de dados gerados pela cópia em massa quando nenhuma intervenção do usuário ajusta o formato dos dados contêm indicadores quando os dados da coluna podem variar de comprimento ou a coluna pode aceitar NULL como um valor.
BCP_FMT_DATA_LEN DBINT É o comprimento em bytes dos dados (comprimento da coluna)

É o comprimento máximo, em bytes, dos dados desta coluna no arquivo de usuário, não incluindo o comprimento de qualquer indicador de comprimento ou terminador.

Definir BCP_FMT_DATA_LEN como SQL_NULL_DATA indica que todos os valores na coluna de arquivo de dados são ou devem ser definidos como NULL.

Definir BCP_FMT_DATA_LEN para SQL_VARLEN_DATA indica que o sistema deve determinar o comprimento dos dados em cada coluna. Para algumas colunas, isso pode significar que um indicador de comprimento/nulo é gerado para preceder dados em uma cópia do SQL Server ou que o indicador é esperado em dados copiados para o SQL Server.

Para tipos de dados binários e de caracteres do SQL Server, BCP_FMT_DATA_LEN pode ser SQL_VARLEN_DATA, SQL_NULL_DATA, 0 ou algum valor positivo. Se BCP_FMT_DATA_LEN for SQL_VARLEN_DATA, o sistema usará o indicador de comprimento, se presente, ou uma sequência de terminador para determinar o comprimento dos dados. Se um indicador de comprimento e uma sequência de terminador forem fornecidos, a cópia em massa usará aquele que resulta na menor quantidade de dados sendo copiados. Se BCP_FMT_DATA_LEN for SQL_VARLEN_DATA, o tipo de dados será um caractere do SQL Server ou um tipo binário e nem um indicador de comprimento nem uma sequência de terminador serão especificados, o sistema retornará uma mensagem de erro.

Se BCP_FMT_DATA_LEN for 0 ou um valor positivo, o sistema usará BCP_FMT_DATA_LEN como o tamanho máximo dos dados. No entanto, se, além de um BCP_FMT_DATA_LEN positivo, um indicador de comprimento ou sequência de terminador for fornecido, o sistema determinará o comprimento dos dados usando o método que resulta na menor quantidade de dados sendo copiados.

O valor BCP_FMT_DATA_LEN representa a contagem de bytes de dados. Se os dados de caracteres forem representados por caracteres largos Unicode, um valor de parâmetro BCP_FMT_DATA_LEN positivo representará o número de caracteres multiplicados pelo tamanho, em bytes, de cada caractere.
BCP_FMT_TERMINATOR LPCBYTE Ponteiro para a sequência do terminador (ANSI ou Unicode conforme apropriado) a ser usado para esta coluna. Esse parâmetro é útil principalmente para tipos de dados de caractere porque todos os outros tipos têm comprimento fixo ou, no caso de dados binários, exigem um indicador de comprimento para registrar com precisão o número de bytes presentes.

Para evitar o término dos dados extraídos ou para indicar que os dados em um arquivo de usuário não foram encerrados, defina esse parâmetro como NULL.

Se mais de um meio de especificar um comprimento de coluna de arquivo de usuário for usado (como um terminador e um indicador de comprimento, ou um terminador e um comprimento máximo de coluna), a cópia em massa escolherá a que resulta na menor quantidade de dados sendo copiados.

A API de cópia em massa executa a conversão de caracteres Unicode em MBCS conforme necessário. É necessário ter cuidado para garantir que a cadeia de caracteres de byte do terminador e o comprimento da cadeia de caracteres de bytes sejam definidos corretamente.
BCP_FMT_SERVER_COL INT Posição ordinal da coluna no banco de dados
BCP_FMT_COLLATION LPCSTR Nome da ordenação.

pValue
É o ponteiro para o valor a ser associado à propriedade. Ele permite que cada propriedade de formato de coluna seja definida individualmente.

cbvalue
É o comprimento do buffer de propriedade em bytes.

Devoluções

SUCCEED ou FAIL.

Observações

Essa função substitui a função bcp_colfmt . Toda a funcionalidade de bcp_colfmt é fornecida na função bcp_setcolfmt . Além disso, o suporte para ordenação de colunas também é fornecido. É recomendável que os seguintes atributos de formato de coluna sejam definidos na ordem abaixo:

BCP_FMT_SERVER_COL

BCP_FMT_DATA_LEN

BCP_FMT_TYPE

A função bcp_setcolfmt permite que você especifique o formato de arquivo de usuário para cópias em massa. Para cópia em massa, um formato contém as seguintes partes:

  • Um mapeamento de colunas de arquivo de usuário para colunas de banco de dados.

  • O tipo de dados de cada coluna de arquivo de usuário.

  • O comprimento do indicador opcional para cada coluna.

  • O comprimento máximo dos dados por coluna de arquivo de usuário.

  • A sequência de bytes de encerramento opcional para cada coluna.

  • O comprimento da sequência de bytes de encerramento opcional.

Cada chamada para bcp_setcolfmt especifica o formato de uma coluna de arquivo de usuário. Por exemplo, para alterar as configurações padrão de três colunas em um arquivo de dados de usuário de cinco colunas, primeiro chame bcp_columns(5) e chame bcp_setcolfmt cinco vezes, com três dessas chamadas definindo seu formato personalizado. Para as duas chamadas restantes, defina BCP_FMT_TYPE como 0 e defina BCP_FMT_INDICATOR_LENGTH, BCP_FMT_DATA_LEN e cbValue como 0, SQL_VARLEN_DATA e 0, respectivamente. Este procedimento copia todas as cinco colunas, três com o formato personalizado e duas com o formato padrão.

A função bcp_columns deve ser chamada antes de chamar bcp_setcolfmt.

Você deve chamar bcp_setcolfmt uma vez para cada propriedade de cada coluna no arquivo de usuário.

Você não precisa copiar todos os dados em um arquivo de usuário para a tabela do SQL Server. Para ignorar uma coluna, especifique o formato dos dados da coluna, definindo o parâmetro BCP_FMT_SERVER_COL como 0. Se quiser ignorar uma coluna, especifique seu tipo.

A função bcp_writefmt pode ser usada para persistir a especificação de formato.

suporte bcp_setcolfmt para recursos avançados de data e hora

Os tipos usados com a propriedade BCP_FMT_TYPE para tipos de data/hora são especificados em alterações de cópia em massa para tipos avançados de data e hora (OLE DB e ODBC).

Para obter mais informações, consulte Melhorias de data e hora (ODBC).

Consulte Também

Funções de cópia em massa