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
Podes copiar em massa diretamente das variáveis do programa. Depois de alocar variáveis para armazenar os dados por uma linha e chamar bcp_init para iniciar a cópia em massa, chama bcp_bind para cada coluna para especificar a localização e o formato da variável do programa a associar à coluna. Preenche cada variável com dados e depois chama-bcp_sendrow para enviar uma linha de dados ao servidor. Repita o processo de preencher as variáveis e chamar bcp_sendrow até que todas as linhas tenham sido enviadas para o servidor, depois chame-bcp_done para especificar que a operação está concluída.
O parâmetro bcp_bindpData contém o endereço da variável a ser associada à coluna. Os dados de cada coluna podem ser armazenados de duas formas:
Aloque uma variável para armazenar os dados.
Aloque uma variável indicadora seguida imediatamente pela variável de dados.
A variável indicadora indica o comprimento dos dados para colunas de comprimento variável, e também indica valores NULL se a coluna permitir NULLs. Se for usada apenas uma variável de dados, então o endereço dessa variável é armazenado no parâmetro bcp_bindpData . Se for usada uma variável indicadora, o endereço da variável indicadora é armazenado no parâmetro bcp_bindpData . As funções de cópia em massa calculam a localização da variável de dados adicionando os parâmetros bcp_bindcbIndicator e pData .
bcp_bind suporta três métodos para lidar com dados de comprimento variável:
Usa o cbData apenas com uma variável de dados. Coloque o comprimento dos dados no cbData. Cada vez que o comprimento dos dados a copiar em massa muda, ligue para bcp_collen para reiniciar o cbData. Se estiver a ser usado um dos outros dois métodos, especifique SQL_VARLEN_DATA para o cbData. Se todos os valores de dados fornecidos para uma coluna forem NULL, especifique SQL_NULL_DATA para cbData.
Usa variáveis indicadoras. À medida que cada novo valor de dados é movido para a variável de dados, armazene o comprimento do valor na variável indicadora. Se estiver a ser usado um dos outros dois métodos, especifique 0 para cbIndicator.
Usa ponteiros terminator. Carregue o parâmetro bcp_bindpTerm com o endereço do padrão de bits que termina os dados. Se estiver a ser usado um dos outros dois métodos, especifique NULL para pTerm.
Todos estes três métodos podem ser usados na mesma chamada bcp_bind , caso em que se utiliza a especificação que resulta na menor quantidade de dados a ser copiada.
O parâmetro de tipo bcp_bind utiliza identificadores de tipo de dados DB-Library, não identificadores ODBC. DB-Library identificadores de tipos de dados são definidos em sqlncli.h para utilização com a função bcp_bind ODBC.
As funções de cópia em massa não suportam todos os tipos de dados ODBC C. Por exemplo, as funções de cópia em massa não suportam a estrutura de SQL_C_TYPE_TIMESTAMP ODBC, por isso use SQLBindCol ou SQLGetData para converter dados de SQL_TYPE_TIMESTAMP ODBC numa variável SQL_C_CHAR. Se depois usar bcp_bind com um parâmetro de tipo SQLCHARACTER para ligar a variável a uma coluna de data-hora SQL Server, as funções de cópia em massa convertem a cláusula de escape de carimbo temporal na variável de carácter para o formato de data-hora correto.
A tabela seguinte lista os tipos de dados recomendados a usar no mapeamento de um tipo de dado ODBC SQL para um tipo de dado SQL Server.
| Tipo ODBC SQLdata | Tipo de dados ODBC C | bcp_bind parâmetro de tipo | Tipo de dados do SQL Server |
|---|---|---|---|
| SQL_CHAR | SQL_C_CHAR | SQLCHARACTER |
character char |
| SQL_VARCHAR | SQL_C_CHAR | SQLCHARACTER |
varchar Carácter variável Variação do carvão sysname |
| SQL_LONGVARCHAR | SQL_C_CHAR | SQLCHARACTER | texto |
| SQL_WCHAR | SQL_C_WCHAR | SQLNCHAR | nchar |
| SQL_WVARCHAR | SQL_C_WCHAR | SQLNVARCHAR | nvarchar |
| SQL_WLONGVARCHAR | SQL_C_WCHAR | SQLNTEXT | ntext |
| SQL_DECIMAL | SQL_C_CHAR | SQLCHARACTER |
decimal dec money smallmoney |
| SQL_NUMERIC | SQL_C_NUMERIC | SQLNUMERICN | numeric |
| SQL_BIT | SQL_C_BIT | SQLBIT | bit |
| SQL_TINYINT (assinado) | SQL_C_SSHORT | SQLINT2 | smallint |
| SQL_TINYINT (não assinado) | SQL_C_UTINYINT | SQLINT1 | tinyint |
| SQL_SMALL_INT (assinado) | SQL_C_SSHORT | SQLINT2 | smallint |
| SQL_SMALL_INT (não assinado) | SQL_C_SLONG | SQLINT4 |
int integer |
| SQL_INTEGER (assinado) | SQL_C_SLONG | SQLINT4 |
int integer |
| SQL_INTEGER (não assinado) | SQL_C_CHAR | SQLCHARACTER |
decimal dec |
| SQL_BIGINT (assinado e não assinado) | SQL_C_CHAR | SQLCHARACTER | bigint |
| SQL_REAL | SQL_C_FLOAT | SQLFLT4 | real |
| SQL_FLOAT | SQL_C_DOUBLE | SQLFLT8 | float |
| SQL_DOUBLE | SQL_C_DOUBLE | SQLFLT8 | float |
| SQL_BINARY | SQL_C_BINARY | SQLBINARY |
binary timestamp |
| SQL_VARBINARY | SQL_C_BINARY | SQLBINARY |
varbinary Variação binária |
| SQL_LONGVARBINARY | SQL_C_BINARY | SQLBINARY | image |
| SQL_TYPE_DATE | SQL_C_CHAR | SQLCHARACTER |
datetime smalldatetime |
| SQL_TYPE_TIME | SQL_C_CHAR | SQLCHARACTER |
datetime smalldatetime |
| SQL_TYPE_TIMESTAMP | SQL_C_CHAR | SQLCHARACTER |
datetime smalldatetime |
| SQL_GUID | SQL_C_GUID | SQLUNIQUEID | uniqueidentifier |
| SQL_INTERVAL_ | SQL_C_CHAR | SQLCHARACTER | char |
O SQL Server não tem tipos de dados signed tinyint, unsigned smallint ou unsigned int. Para evitar a perda de valores de dados ao migrar estes tipos de dados, crie a tabela SQL Server com o próximo maior tipo de dado inteiro. Para evitar que os utilizadores adicionem mais tarde valores fora do intervalo permitido pelo tipo de dado original, aplique uma regra à coluna do SQL Server para restringir os valores permitidos ao intervalo suportado pelo tipo de dado na fonte original:
CREATE TABLE Sample_Ints(STinyIntCol SMALLINT,
USmallIntCol INT)
GO
CREATE RULE STinyInt_Rule
AS
@range >= -128 AND @range <= 127
GO
CREATE RULE USmallInt_Rule
AS
@range >= 0 AND @range <= 65535
GO
sp_bindrule STinyInt_Rule, 'Sample_Ints.STinyIntCol'
GO
sp_bindrule USmallInt_Rule, 'Sample_Ints.USmallIntCol'
GO
O SQL Server não suporta diretamente tipos de dados de intervalo. No entanto, uma aplicação pode armazenar sequências de escape de intervalos como cadeias de caracteres numa coluna de caracteres do SQL Server. A aplicação pode lê-los para uso posterior, mas não podem ser usados em instruções Transact-SQL.
As funções de cópia em massa podem ser usadas para carregar rapidamente dados no SQL Server que foram lidos a partir de uma fonte de dados ODBC. Use o SQLBindCol para associar as colunas de um conjunto de resultados a variáveis de programação, depois use bcp_bind para associar as mesmas variáveis de programa a uma operação de cópia em massa. Chamar SQLFetchScroll ou SQLFetch obtém então uma linha de dados da fonte de dados ODBC para as variáveis do programa, e chamar bcp_sendrow bulk copia os dados das variáveis do programa para SQL Server .
Uma aplicação pode usar a função bcp_colptr sempre que precisar de alterar o endereço da variável de dados originalmente especificada no parâmetro bcp_bindpData . Uma aplicação pode usar a função bcp_collen sempre que precisar de alterar o comprimento de dados originalmente especificado no parâmetro bcp_bindcbData .
Não pode ler dados de SQL Server em variáveis de programa usando cópia em massa; não existe nada como uma função "bcp_readrow". Só pode enviar dados da aplicação para o servidor.