Cópia em massa de variáveis do programa
Aplica-se a: SQL Server Banco de Dados SQL do Azure Instância Gerenciada de SQL do Azure Azure Synapse Analytics Analytics Platform System (PDW)
Você pode fazer cópias em massa diretamente de variáveis de programa. Depois de alocar variáveis para manter os dados de uma linha e chamar bcp_init para iniciar a cópia em massa, chame bcp_bind para cada coluna para especificar o local e o formato da variável de programa a ser associada à coluna. Preencha cada variável com dados e chame bcp_sendrow para enviar uma linha de dados ao servidor. Repita o processo de preenchimento das variáveis e chame bcp_sendrow até que todas as linhas tenham sido enviadas ao servidor e, em seguida, chame bcp_done para especificar que a operação foi concluída.
O parâmetro pData bcp_bindcontém o endereço da variável que está sendo associada à coluna. Os dados de cada coluna podem ser armazenados de uma destas duas formas:
Aloque uma variável para manter os dados.
Aloque uma variável de indicador seguida imediatamente pela variável de dados.
A variável de indicador indica o comprimento dos dados para colunas de comprimento variável e também indica valores NULL se a coluna permitir NULLs. Se apenas uma variável de dados for usada, o endereço dessa variável será armazenado no parâmetro pData bcp_bind. Se uma variável indicadora for usada, o endereço da variável indicadora será armazenado no parâmetro bcp_bindpData . As funções de cópia em massa calculam o local da variável de dados adicionando os parâmetros bcp_bindcbIndicator e pData.
bcp_bind oferece suporte a três métodos para lidar com dados de comprimento variável:
Use cbData com apenas uma variável de dados. Coloque o comprimento dos dados em cbData. Cada vez que o comprimento dos dados a serem copiados em massa for alterado, chame bcp_collen para redefinir cbData. Se um dos outros dois métodos estiver sendo usado, especifique SQL_VARLEN_DATA para cbData. Se todos os valores de dados fornecidos para uma coluna forem NULL, especifique SQL_NULL_DATA para cbData.
Use variáveis de indicador. Como cada valor de dados novo é movido na variável de dados, armazene o comprimento do valor na variável de indicador. Se um dos outros dois métodos estiver sendo usado, especifique 0 para cbIndicator.
Use ponteiros de terminador. Carregue o parâmetro pTerm bcp_bindcom o endereço do padrão de bits que encerra os dados. Se um dos outros dois métodos estiver sendo usado, especifique NULL para pTerm.
Todos esses três métodos podem ser usados na mesma chamada bcp_bind , caso em que a especificação que resulta na menor quantidade de dados sendo copiados é usada.
O parâmetro de tipo bcp_bindusa identificadores de tipo de dados DB-Library, não identificadores de tipo de dados ODBC. Os identificadores de tipo de dados da biblioteca de banco de dados são definidos em sqlncli.h para uso com a função ODBC bcp_bind .
As funções de cópia em massa não têm suporte para todos os tipos de dados do ODBC C. Por exemplo, as funções de cópia em massa não dão suporte à estrutura de SQL_C_TYPE_TIMESTAMP ODBC, portanto, use SQLBindCol ou SQLGetData para converter dados de SQL_TYPE_TIMESTAMP ODBC em uma variável SQL_C_CHAR. Se você usar bcp_bind com um parâmetro de tipo SQLCHARACTER para associar a variável a uma coluna datetime do SQL Server, as funções de cópia em massa converterão a cláusula de escape de carimbo de data/hora na variável de caractere para o formato datetime adequado.
A tabela a seguir lista os tipos de dados recomendados a serem usados no mapeamento de um tipo de dados SQL ODBC para um tipo de dados SQL Server.
Tipo de dados do ODBC SQLz | Tipos de dados do 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 character varying char varying sysname |
SQL_LONGVARCHAR | SQL_C_CHAR | SQLCHARACTER | text |
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 (sem-sinal) | SQL_C_UTINYINT | SQLINT1 | tinyint |
SQL_SMALL_INT (assinado) | SQL_C_SSHORT | SQLINT2 | smallint |
SQL_SMALL_INT (sem-sinal) | SQL_C_SLONG | SQLINT4 | int inteiro |
SQL_INTEGER (assinado) | SQL_C_SLONG | SQLINT4 | int inteiro |
SQL_INTEGER (não assinado) | SQL_C_CHAR | SQLCHARACTER | decimal dec |
SQL_BIGINT (assinado e sem-sinal) | 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 | imagem |
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 tinyint assinados, smallint não assinados ou int não assinados. Para evitar a perda de valores de dados ao migrar esses tipos de dados, crie a tabela do SQL Server com o próximo maior tipo de dados inteiro. Para impedir que os usuários adicionem posteriormente valores fora do intervalo permitido pelo tipo de dados original, aplique uma regra à coluna SQL Server para restringir os valores permitidos ao intervalo com suporte pelo tipo de dados 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 oferece suporte direto a tipos de dados de intervalo. No entanto, um aplicativo pode armazenar sequências de escape de intervalo como cadeias de caracteres em uma coluna de caracteres do SQL Server. O aplicativo pode lê-los para uso posterior, mas eles 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 de uma fonte de dados ODBC. Use SQLBindCol para associar as colunas de um conjunto de resultados a variáveis de programa e, em seguida, use bcp_bind para associar as mesmas variáveis de programa a uma operação de cópia em massa. Chamar SQLFetchScroll ou SQLFetch busca uma linha de dados da fonte de dados ODBC para as variáveis de programa e chamar bcp_sendrow copia em massa os dados das variáveis de programa para o SQL Server.
Um aplicativo pode usar a função bcp_colptr sempre que precisar alterar o endereço da variável de dados originalmente especificada no parâmetro pData bcp_bind. Um aplicativo pode usar a função bcp_collen sempre que precisar alterar o comprimento dos dados originalmente especificado no parâmetro bcp_bindcbData.
Você não pode ler dados do SQL Server em variáveis de programa usando cópia em massa; Não há nada como uma função "bcp_readrow". Você só pode enviar dados do aplicativo para o servidor.