Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
Aplica-se a:SQL Server
Base de Dados SQL do Azure
Instância Gerida do Azure SQL
Azure Synapse Analytics
Altera as definições predefinidas para vários parâmetros de controlo para uma cópia em massa entre um ficheiro e o SQL Server.
Syntax
RETCODE bcp_control (
HDBC hdbc,
INT eOption,
void* iValue);
Arguments
hdbc
É o identificador de conexão ODBC habilitado para cópia em massa.
eOption
É um dos seguintes:
BCPABORT
Para uma operação de cópia em massa que já está em curso. Ligue para bcp_control com uma eOption de BCPABORT a partir de outro thread para parar uma operação de cópia em massa em execução. O parâmetro iValue é ignorado.
BCPBATCH
É o número de linhas por lote. O padrão é 0, que indica ou todas as linhas de uma tabela quando os dados estão a ser extraídos, ou todas as linhas do ficheiro de dados do utilizador, quando os dados estão a ser copiados para um SQL Server. Um valor inferior a 1 reinicia o BCPBATCH para o padrão.
BCPDELAYREADFMT
Um Booleano, se definido como verdadeiro, fará com que bcp_readfmt leia na execução. Se for false (o padrão), bcp_readfmt lê imediatamente o ficheiro de formatação. Um erro de sequência ocorrerá se o BCPDELAYREADFMT for verdadeiro e chamares bcp_columns ou bcp_setcolfmt.
Também ocorrerá um erro de sequência se chamar bcp_control(hdbc, BCPDELAYREADFMT, (void *)FALSE) depois de chamar bcp_control(hdbc, BCPDELAYREADFMT, (void *)TRUE) e bcp_writefmt.
Para mais informações, consulte Descoberta de Metadados.
BCPFILECP
O iValue contém o número da página de código do ficheiro de dados. Pode especificar o número da página de códigos, como 1252 ou 850, ou um destes valores:
BCPFILE_ACP: os dados no ficheiro estão na página de código Microsoft Windows do cliente.
BCPFILE_OEMCP: os dados no ficheiro estão na página de códigos OEM do cliente (por defeito).
BCPFILE_RAW: os dados no ficheiro estão na página de códigos do SQL Server.
BCPFILEFMT
O número de versão do formato de ficheiro de dados. Isto pode ser 80 (SQL Server 2000 (8.x)), 90 (SQL Server 2005 (9.x)), 100 (SQL Server 2008 (10.0.x) ou SQL Server 2008 R2 (10.50.x)), 110 (SQL Server 2012 (11.x)) ou 120 (SQL Server 2014 (12.x)). 120 é o padrão. Isto é útil para exportar e importar dados em formatos suportados por versões anteriores do servidor. Por exemplo, para importar dados obtidos de uma coluna de texto num servidor SQL Server 2000 (8.x) para uma coluna varchar(max) num servidor SQL Server 2005 (9.x) ou posterior, deve especificar 80. De forma semelhante, se especificar 80 ao exportar dados de uma coluna varchar(max), será guardado tal como as colunas de texto são guardadas no formato SQL Server 2000 (8.x), podendo ser importado para uma coluna de texto de um servidor SQL Server 2000 (8.x).
BCPFIRST
É a primeira linha de dados a limar ou tabela a copiar. O padrão é 1; um valor inferior a 1 reinicia esta opção para o seu padrão.
BCPFIRSTEX
Para operações de saída BCP, especifica a primeira linha da tabela da base de dados a copiar para o ficheiro de dados.
Para BCP em operações, especifica a primeira linha do ficheiro de dados a copiar para a tabela da base de dados.
Espera-se que o parâmetro iValue seja o endereço de um inteiro assinado de 64 bits contendo o valor. O valor máximo que pode ser passado ao BCPFIRSTEX é 2^63-1.
BCPFMTXML
Especifica que o ficheiro de formato gerado deve estar em formato XML. Está desligado por defeito.
Os ficheiros em formato XML oferecem maior flexibilidade, mas com algumas restrições adicionais. Por exemplo, não pode especificar simultaneamente o prefixo e o terminador de um campo, o que era possível em ficheiros de formato antigos.
Note
Os ficheiros de formato XML só são suportados quando o SQL Server está instalado juntamente com o SQL Server Native Client.
BCPHINTS
O iValue contém um ponteiro de string de caracteres SQLTCHAR. A cadeia endereçada especifica ou dicas de processamento em massa do SQL Server ou uma instrução Transact-SQL que devolve um conjunto de resultados. Se for especificada uma afirmação Transact-SQL que devolve mais do que um conjunto de resultados, todos os conjuntos de resultados após o primeiro são ignorados. Para mais informações sobre dicas de processamento de cópias em massa, consulte Utilidade bcp.
BCPKEEPIDENTITY
Quando o iValue é TRUE, especifica que as funções de cópia em massa inserem valores de dados fornecidos para colunas do SQL Server definidas com uma restrição de identidade. O ficheiro de entrada deve fornecer valores para as colunas de identidade. Se isto não estiver definido, são gerados novos valores de identidade para as linhas inseridas. Qualquer dado presente no ficheiro para as colunas de identidade é ignorado.
BCPKEEPNULLS
Especifica se os valores de dados vazios no ficheiro serão convertidos em valores NULL na tabela do SQL Server. Quando o iValue é VERDADEIRO, os valores vazios serão convertidos em NULL na tabela do SQL Server. O padrão é que valores vazios sejam convertidos para valores por defeito para a coluna na tabela do SQL Server, caso exista um padrão.
BCPLAST
É a última linha para copiar. O padrão é copiar todas as linhas; um valor inferior a 1 reinicia esta opção para o seu padrão.
BCPLASTEX
Para operações de saída BCP, especifica a última linha da tabela da base de dados para copiar para o ficheiro de dados.
Para BCP em operações, especifica a última linha do ficheiro de dados a ser copiada para a tabela da base de dados.
Espera-se que o parâmetro iValue seja o endereço de um inteiro assinado de 64 bits contendo o valor. O valor máximo que pode ser transmitido ao BCPLASTEX é 2^63-1.
BCPMAXERRS
É o número de erros permitidos antes da operação de cópia em massa falhar. O padrão é 10; um valor inferior a 1 reinicia esta opção para o seu padrão. A cópia em massa impõe um máximo de 65.535 erros. Uma tentativa de definir esta opção para um valor superior a 65.535 resulta na definição da opção para 65.535.
BCPODBC
Quando TRUE, especifica que os valores datetime e smalldatetime guardados no formato de caracteres usarão o prefixo e sufixo da sequência de escape de carimbo temporal ODBC. A opção BCPODBC aplica-se apenas a DB_OUT.
Quando FALSE, um valor de data-hora que representa 1 de janeiro de 1997 é convertido para a cadeia de caracteres: 1997-01-01 00:00:00.000. Quando TRUE, o mesmo valor de data-hora é representado como: {ts '1997-01-01 00:00:00.000'}.
BCPROWCOUNT
Devolve o número de linhas afetadas pela operação BCP atual (ou última).
BCPTEXTFILE
Quando TRUE, especifica que o ficheiro de dados é um ficheiro de texto, e não um ficheiro binário. Se o ficheiro for um ficheiro de texto, o BCP determina se é Unicode ou não verificando o marcador de bytes Unicode nos dois primeiros bytes do ficheiro de dados.
BCPUNICODEFILE
Quando TRUE, especifica que o ficheiro de entrada é um ficheiro Unicode.
iValue
É o valor para a eOpção especificada.
iValue é um valor inteiro (LONGLONG) lançado para um ponteiro void para permitir uma expansão futura para valores de 64 bits.
Devoluções
TER SUCESSO ou FALHAR.
Observações
Esta função define vários parâmetros de controlo para operações de cópia em massa, incluindo o número de erros permitidos antes de cancelar uma cópia em massa, o número das primeiras e últimas linhas a copiar de um ficheiro de dados, e o tamanho do lote.
Esta função também é usada para especificar a instrução SELECT ao copiar em massa do SQL Server o conjunto de resultados de um SELECT. Defina eOption para BCPHINTS e defina iValue para ter um ponteiro para uma string SQLTCHAR contendo a instrução SELECT.
Estes parâmetros de controlo só têm significado ao copiar entre um ficheiro de utilizador e uma tabela SQL Server. As definições dos parâmetros de controlo não têm efeito nas linhas copiadas para SQL Server com bcp_sendrow.
Exemplo
// Variables like henv not specified.
SQLHDBC hdbc;
DBINT nRowsProcessed;
// Application initiation, get an ODBC environment handle, allocate the
// hdbc, and so on.
...
// Enable bulk copy prior to connecting on allocated hdbc.
SQLSetConnectAttr(hdbc, SQL_COPT_SS_BCP, (SQLPOINTER) SQL_BCP_ON,
SQL_IS_INTEGER);
// Connect to the data source, return on error.
if (!SQL_SUCCEEDED(SQLConnect(hdbc, _T("myDSN"), SQL_NTS,
_T("myUser"), SQL_NTS, _T("myPwd"), SQL_NTS)))
{
// Raise error and return.
return;
}
// Initialize bulk copy.
if (bcp_init(hdbc, _T("address"), _T("address.add"), _T("addr.err"),
DB_IN) == FAIL)
{
// Raise error and return.
return;
}
// Set the number of rows per batch.
if (bcp_control(hdbc, BCPBATCH, (void*) 1000) == FAIL)
{
// Raise error and return.
return;
}
// Set file column count.
if (bcp_columns(hdbc, 1) == FAIL)
{
// Raise error and return.
return;
}
// Set the file format.
if (bcp_colfmt(hdbc, 1, 0, 0, SQL_VARLEN_DATA, '\n', 1, 1)
== FAIL)
{
// Raise error and return.
return;
}
// Execute the bulk copy.
if (bcp_exec(hdbc, &nRowsProcessed) == FAIL)
{
// Raise error and return.
return;
}
printf_s("%ld rows processed by bulk copy.", nRowsProcessed);