bcp_colfmt

Aplica-se a:SQL ServerBase de Dados SQL do AzureInstância Gerida do Azure SQLAzure Synapse Analytics

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

Syntax

  
RETCODE bcp_colfmt (  
        HDBC hdbc,  
        INT idxUserDataCol,  
        BYTE eUserDataType,  
        INT cbIndicator,  
        DBINT cbUserData,  
        LPCBYTE pUserDataTerm,  
        INT cbUserDataTerm,  
        INT idxServerCol);  

Arguments

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

idxUserDataCol
É o número da coluna ordinal no ficheiro de dados do utilizador para o qual o formato está a ser especificado. A primeira coluna é 1.

eUserDataType
É o tipo de dado desta coluna no ficheiro de utilizador. Se for diferente do tipo de dados da coluna correspondente na tabela da base de dados (idxServerColumn), o bulk copy converte os dados, se possível.

O SQL Server 2005 (9.x) introduziu suporte para tokens de tipos de dados SQLXML e SQLUDT no parâmetro eUserDataType.

O parâmetro eUserDataType é enumerado pelos tokens de tipo de dados do SQL Server em sqlncli.h, não pelos 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 do SQL Server para um ficheiro, quando o eUserDataType é SQLDECIMAL ou SQLNUMERIC:

  • Se a coluna fonte não for decimal ou numérica, são usadas a precisão e escala padrão.

  • Se a coluna de origem for decimal ou numérica, utiliza-se a precisão e a escala da coluna de origem.

cbIndicator
É 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 (quando não se usa indicador), 1, 2, 4 ou 8.

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.

cbUserData
É o comprimento máximo, em bytes, dos dados desta coluna no ficheiro de utilizador, sem incluir o comprimento de qualquer indicador ou terminador de comprimento.

Definir cbUserData para SQL_NULL_DATA indica que todos os valores na coluna do ficheiro de dados são, ou devem ser, definidos como NULL.

Definir o cbUserData 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 caracteres e binários, cbUserData pode ser SQL_VARLEN_DATA, SQL_NULL_DATA, 0 ou algum valor positivo. Se o cbUserData estiver 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 cbUserData for SQL_VARLEN_DATA, o tipo de dado for um carácter SQL Server ou tipo binário, e nem indicador de comprimento nem sequência de terminadores for especificado, o sistema devolve uma mensagem de erro.

Se cbUserData for 0 ou um valor positivo, o sistema usa cbUserData como comprimento máximo de dados. No entanto, se, além de um cbUserData 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 cbUserData representa a contagem de bytes de dados. Se os dados dos caracteres forem representados por caracteres de larga escala Unicode, então um valor positivo do parâmetro cbUserData representa o número de caracteres multiplicado pelo tamanho, em bytes, de cada carácter.

pUserDataTerm
É a sequência de terminadores a ser usada 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.

cbUserDataTerm
É o comprimento, em bytes, da sequência de terminadores a ser usada para esta coluna. Se não houver terminador presente ou desejado nos dados, defina esse valor para 0.

idxServerCol
É a posição ordinal da coluna na tabela da base de dados. O número da primeira coluna é 1. A posição ordinal de uma coluna é reportada por SQLColumns.

Se este valor for 0, a cópia em massa ignora a coluna no ficheiro de dados.

Devoluções

TER SUCESSO ou FALHAR.

Observações

A função bcp_colfmt 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_colfmt especifica o formato de 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 ligue bcp_columns(5)) e depois chame-bcp_colfmt cinco vezes, sendo que três dessas chamadas definem o seu formato personalizado. Para as duas chamadas restantes, defina o eUserDataType para 0 e defina cbIndicator, cbUserData e cbUserDataTerm 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.

Para o cbIndicator, um valor de 8 para indicar um tipo de valor grande é agora válido. Se o prefixo for especificado para um campo cuja coluna correspondente é um novo tipo máximo, só pode ser definido para 8. Para mais detalhes, veja bcp_bind.

A função bcp_columns deve ser chamada antes de qualquer chamada a bcp_colfmt.

Deve chamar bcp_colfmt uma vez por cada coluna no ficheiro de utilizador.

Chamar bcp_colfmt mais do que uma vez para qualquer coluna de ficheiro de utilizador causa um erro.

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 idxServerCol 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_colfmt Suporte para Funcionalidades Melhoradas de Data e Hora

Para informações sobre os tipos usados com o parâmetro eUserDataType para tipos de data/hora, consulte Alterações de Cópia em Massa para Tipos de Data e Hora Melhorados (OLE DB e ODBC).

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