bcp_setcolfmt

Aplica-se a: SQL ServerBase de Dados SQL do AzureAzure SQL Managed InstanceAzure Synapse AnalyticsSistema de Plataforma de Análise (PDW)

A função bcp_setcolfmt sobrepõe-se à bcp_colfmt. Ao especificar a coluna de colunas, deve ser usada a função bcp_setcolfmt . bcp_setbulkmode pode ser usado para especificar mais do que um formato de coluna.

Esta função oferece uma abordagem flexível para especificar o formato da coluna numa operação de cópia em massa. É usado para definir atributos individuais do formato das colunas. Cada chamada a bcp_setcolfmt define um atributo de formato de coluna.

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

Syntax

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

Arguments

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

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

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

Property Valor Description
BCP_FMT_TYPE byte É o tipo de dado desta coluna no ficheiro de utilizador. Se for diferente do tipo de dado da coluna correspondente na tabela da base de dados, o bulk copy converte os dados, se possível.

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

Para especificar a representação padrão dos dados para o tipo de dado SQL Server, defina este parâmetro para 0.

Para uma cópia em massa de SQL Server para um ficheiro, quando BCP_FMT_TYPE é SQLDECIMAL ou SQLNUMERIC, se a coluna de origem não for decimal ou numérica, usam-se a precisão e escala padrão. Caso contrário, se a coluna de origem for decimal ou numérica, utilizam-se a precisão e a escala da coluna de origem.
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 do comprimento do indicador são 0 (sem indicador), 1, 2 ou 4.

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

Os indicadores aparecem na memória diretamente antes de qualquer dado e no ficheiro de dados diretamente antes dos dados a que se aplicam.

Se for utilizado mais do que um meio para especificar o comprimento da coluna de um ficheiro de dados (como um indicador e um comprimento máximo de coluna, ou um indicador e uma sequência de terminadores), a cópia em massa escolhe aquela que resulta na menor quantidade de dados a ser copiada.

Ficheiros de dados gerados por cópia em massa, quando nenhuma intervenção do utilizador ajusta o formato dos dados, contêm indicadores em que os dados da coluna podem variar em comprimento ou quando a coluna pode aceitar NULL como 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 ficheiro de utilizador, sem incluir o comprimento de qualquer indicador de comprimento ou terminador.

Definir BCP_FMT_DATA_LEN para SQL_NULL_DATA indica que todos os valores na coluna do ficheiro de dados são, ou devem ser definidos para, 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, isto pode significar que um indicador de comprimento/nulo é gerado para preceder dados numa cópia do SQL Server, ou que o indicador é esperado nos dados copiados para o SQL Server.

Para SQL Server tipos de dados de carácter e binários, 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 utiliza o indicador de comprimento, se presente, ou uma sequência de terminadores para determinar o comprimento dos dados. Se forem fornecidos tanto um indicador de comprimento como uma sequência de terminadores, a cópia em massa utiliza aquela que resulta na menor quantidade de dados a ser copiada. Se BCP_FMT_DATA_LEN for SQL_VARLEN_DATA, o tipo de dado for de carácter SQL Server ou binário, e nem indicador de comprimento nem sequência de terminadores for especificado, o sistema devolve uma mensagem de erro.

Se BCP_FMT_DATA_LEN for 0 ou um valor positivo, o sistema usa BCP_FMT_DATA_LEN como comprimento máximo de dados. No entanto, se, além de um BCP_FMT_DATA_LEN positivo, for fornecido um indicador de comprimento ou sequência de terminadores, o sistema determina o comprimento dos dados utilizando o método que resulta na menor quantidade de dados a ser copiada.

O valor BCP_FMT_DATA_LEN representa a contagem de bytes de dados. Se os dados de caracteres forem representados por caracteres de larga escala Unicode, então um valor positivo de parâmetro de BCP_FMT_DATA_LEN representa o número de caracteres multiplicado pelo tamanho, em bytes, de cada carácter.
BCP_FMT_TERMINATOR LPCBYTE Apontador para a sequência de terminadores (ANSI ou Unicode, conforme apropriado) a ser usado para esta coluna. Este parâmetro é útil principalmente para tipos de dados de caracteres porque todos os outros tipos têm comprimento fixo ou, no caso de dados binários, requerem um indicador de comprimento para registar com precisão o número de bytes presentes.

Para evitar terminar dados extraídos, ou para indicar que os dados num ficheiro de utilizador não estão terminados, defina este parâmetro para NULL.

Se forem usados mais do que um meio para especificar o comprimento da coluna de um ficheiro de utilizador (como um terminador e um indicador de comprimento, ou um terminador e um comprimento máximo de coluna), a cópia em massa escolhe aquele que resulta na cópia da menor quantidade de dados.

A API de cópia em massa realiza a conversão de caracteres de Unicode para MBCS conforme necessário. Deve-se ter cuidado para garantir que tanto a cadeia de bytes do terminador como o comprimento da cadeia de bytes estão corretamente definidos.
BCP_FMT_SERVER_COL INT Posição ordinal da coluna na base de dados
BCP_FMT_COLLATION LPCSTR Nome do agrupamento.

pValor
É o indicador do valor a associar à propriedade. Permite que cada propriedade de formato de coluna seja definida individualmente.

CBVALUE
É o comprimento do buffer de propriedades em bytes.

Devoluções

TER SUCESSO ou FALHAR.

Observações

Esta função substitui a função bcp_colfmt . Toda a funcionalidade do bcp_colfmt é fornecida bcp_setcolfmt função. Além disso, é também fornecido suporte para a colação de colunas. Recomenda-se que os seguintes atributos de formato de coluna sejam definidos na ordem dada abaixo:

BCP_FMT_SERVER_COL

BCP_FMT_DATA_LEN

BCP_FMT_TYPE

A função bcp_setcolfmt permite especificar o formato de ficheiro de utilizador para cópias em massa. Para cópias em massa, um formato contém as seguintes partes:

  • Um mapeamento das colunas do ficheiro de utilizador para as colunas da base de dados.

  • O tipo de dados de cada coluna de ficheiro de utilizador.

  • O comprimento do indicador opcional para cada coluna.

  • O comprimento máximo de dados por coluna de ficheiro de utilizador.

  • A sequência opcional de bytes de terminação para cada coluna.

  • O comprimento da sequência opcional de bytes de terminação.

Cada chamada para bcp_setcolfmt especifica o formato para uma coluna de ficheiro de utilizador. Por exemplo, para alterar as definições predefinidas de três colunas num ficheiro de dados de utilizador de cinco colunas, primeiro chame bcp_columns(5), e depois chame-bcp_setcolfmt cinco vezes, sendo que três dessas chamadas definem o seu formato personalizado. Para as duas chamadas restantes, defina BCP_FMT_TYPE para 0 e defina BCP_FMT_INDICATOR_LENGTH, BCP_FMT_DATA_LEN e cbValue para 0, SQL_VARLEN_DATA e 0, respetivamente. Este procedimento copia as cinco colunas, três com o seu formato personalizado e duas com o formato padrão.

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

Deve chamar bcp_setcolfmt uma vez para cada propriedade de cada coluna no ficheiro de utilizador.

Não precisa de copiar todos os dados de um ficheiro de utilizador para a tabela do SQL Server. Para saltar uma coluna, especifique o formato dos dados da coluna, definindo o parâmetro BCP_FMT_SERVER_COL para 0. Se quiseres saltar uma coluna, tens de especificar o seu tipo.

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

bcp_setcolfmt Suporte a Funcionalidades Melhoradas de Data e Hora

Os tipos usados com a propriedade BCP_FMT_TYPE para tipos de data/hora são os especificados em Bulk Copy Changes for Enhanced Date and Time Types (OLE DB e ODBC).

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