Udostępnij przez


Zbiorcze kopiowanie z programu zmienne

Możesz kopiowanie masowe bezpośrednio z programu zmiennych.Po przydzielanie zmiennych do przechowywania danych dla wiersza i telefonicznej bcp_init do rozpoczęcia kopiowania zbiorczej, zadzwoń bcp_bind dla każdej kolumna określić lokalizację i format zmiennej program ma być skojarzony z kolumna.Wypełnij każdą ze zmiennych z danymi, a następnie wywołać bcp_sendrow wysłanie jednego wiersza danych na serwerze.Powtórz proces wypełniania zmiennych i wywoływanie bcp_sendrow aż wszystkie wiersze zostały wysłane do serwera, a następnie wywołać bcp_done , aby określić, że operacja została zakończona.

The bcp_bindpData parameter contains the address of the variable being bound to the column.Dla każdej kolumna danych mogą być przechowywane w jednym z dwóch sposobów:

  • Przydzielić jedną zmienną do przechowywania danych.

  • Przydzielić zmienną wskaźnik następuje natychmiast zmiennej danych.

Zmienną wskaźnika wskazuje długość danych dla kolumn o zmiennej długości, a także wskazuje wartości NULL, jeśli kolumna dozwolone wartości null.If only a data variable is used, then the address of this variable is stored in the bcp_bindpData parameter.If an indicator variable is used, the address of the indicator variable is stored in the bcp_bindpData parameter.The bulk copy functions calculate the location of the data variable by adding the bcp_bindcbIndicator and pData parameters.

bcp_bind obsługuje trzy metody postępowania z danych o zmiennej długości:

  • Użycie cbData ze zmienną danych.Umieszczanie danych w cbData.Each time the length of the data to be bulk copied changes, call bcp_collento reset cbData.Jeśli jest używany jeden z dwóch metod, należy określić SQL_VARLEN_DATA dla cbData.Jeśli wartości danych są dostarczane kolumna wartość NULL, określ SQL_NULL_DATA dla cbData.

  • Za pomocą zmiennych wskaźnika.W każdej nowej wartości danych zostanie przeniesiona do zmiennej danych, długość wartości są przechowywane w zmiennej wskaźnika.Jeśli jest używany jeden z dwóch metod, określ 0 dla cbIndicator.

  • Za pomocą wskaźników terminator.Load the bcp_bindpTerm parameter with the address of the bit pattern that terminates the data.Jeśli jest używany jeden z dwóch metod, należy określić wartość NULL dla pTerm.

Wszystkie trzy z tych metod może być używany na tym samym bcp_bind połączenia, w których jest używany przypadek specyfikacji, która powoduje najmniejszą ilość danych, w której są kopiowane.

The bcp_bindtype parameter uses DB-Library data type identifiers, not ODBC data type identifiers.Identyfikatory typu danych biblioteki DB są zdefiniowane w sqlncli.h do użytku z ODBC bcp_bind funkcja.

Funkcje kopiowanie masowe nie obsługują wszystkie typy danych ODBC C.Na przykład funkcje kopiowanie masowe nie obsługuje struktury SQL_C_TYPE_TIMESTAMP ODBC; tak za pomocą SQLBindCol or SQLGetData do konwertowania danych ODBC SQL_TYPE_TIMESTAMP do zmiennej SQL_C_CHAR.If you then use bcp_bind with a type parameter of SQLCHARACTER to bind the variable to a SQL Serverdatetime column, the bulk copy functions convert the timestamp escape clause in the character variable to the proper datetime format.

W poniższej tabela przedstawiono typy danych zalecany do używania w mapowaniu z typem danych ODBC SQL do SQL Server Typ danych.

Typ SQLdata ODBC

Typ danych ODBC C

bcp_bind Typ Parametr

Typ danych programu SQL Server

SQL_CHAR

SQL_C_CHAR

SQLCHARACTER

znak

Wskazuje inicjatora wątek.

SQL_VARCHAR

SQL_C_CHAR

SQLCHARACTER

varchar

Zmiana znaku

CHAR, zmiana

nazwa_systemu

SQL_LONGVARCHAR

SQL_C_CHAR

SQLCHARACTER

tekst

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

gru

pieniądze

smallmoney

SQL_NUMERIC

SQL_C_NUMERIC

SQLNUMERICN

numeric

SQL_BIT

SQL_C_BIT

SQLBIT

bit

SQL_TINYINT (podpisane)

SQL_C_SSHORT

SQLINT2

smallint

SQL_TINYINT (bez znaku)

SQL_C_UTINYINT

SQLINT1

tinyint

SQL_SMALL_INT (podpisane)

SQL_C_SSHORT

SQLINT2

smallint

SQL_SMALL_INT (bez znaku)

SQL_C_SLONG

SQLINT4

int

Liczba całkowita

SQL_INTEGER (podpisane)

SQL_C_SLONG

SQLINT4

int

Liczba całkowita

SQL_INTEGER (bez znaku)

SQL_C_CHAR

SQLCHARACTER

decimal

gru

SQL_BIGINT (podpisane i niepodpisane)

SQL_C_CHAR

SQLCHARACTER

bigint

SQL_REAL

SQL_C_FLOAT

SQLFLT4

rzeczywiste

SQL_FLOAT

SQL_C_DOUBLE

SQLFLT8

zmiennoprzecinkowe

SQL_DOUBLE

SQL_C_DOUBLE

SQLFLT8

zmiennoprzecinkowe

SQL_BINARY

SQL_C_BINARY

SQLBINARY

plik binarny

Sygnatura czasowa

SQL_VARBINARY

SQL_C_BINARY

SQLBINARY

varbinary

zróżnicowanie binarne

SQL_LONGVARBINARY

SQL_C_BINARY

SQLBINARY

obraz

SQL_TYPE_DATE

SQL_C_CHAR

SQLCHARACTER

data_i_godzina

Smalldatetime

SQL_TYPE_TIME

SQL_C_CHAR

SQLCHARACTER

data_i_godzina

Smalldatetime

SQL_TYPE_TIMESTAMP

SQL_C_CHAR

SQLCHARACTER

data_i_godzina

Smalldatetime

SQL_GUID

SQL_C_GUID

SQLUNIQUEID

Uniqueidentifier

SQL_INTERVAL_

SQL_C_CHAR

SQLCHARACTER

Wskazuje inicjatora wątek.

SQL Server nie zostały podpisane tinyint, bez znaku smallintlub bez znakuint typów danych.Aby zapobiec utracie danych podczas migracji tych typów danych, należy utworzyć SQL Server Tabela następnego największą liczbę całkowitą typu. Aby uniemożliwić użytkownikom dodawanie później wartości poza zakresem dozwolonych przez oryginalny typ danych, należy zastosować regułę do SQL Server kolumna, aby ograniczyć dopuszczalne wartości do zakres, obsługiwanych przez typ danych w oryginalnym źródle:

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

SQL Server nie są obsługiwane typy danych interwału bezpośrednio.Aplikacja może jednak przechowywać sekwencje escape interwał jako ciągi znaków w SQL Server Kolumna znaków. Aplikacja może odczytywać je do późniejszego użytku, ale nie można ich używać w Transact-SQL instrukcje.

Funkcje kopiowanie masowe mogą być używane do szybkiego załadować dane SQL Server które została przeczytana ze urządzenie źródłowe danych ODBC. Użycie SQLBindCol Aby powiązać kolumny zestaw do programu zmiennych wyników, a następnie użyj bcp_bind do powiązania tych samych zmiennych program zbiorczej operacji kopiowania.Wywołanie SQLFetchScroll lub SQLFetch następnie pobiera wiersz danych ze urządzenie źródłowe danych ODBC do zmiennych program, a wywołania bcp_sendrow Zbiorcza kopiuje dane w programie zmienne, które mają zostać SQL Server .

An application can use the bcp_colptr function anytime it needs to change the address of the data variable originally specified in the bcp_bind pData parameter.An application can use the bcp_collen function anytime it needs to change the data length originally specified in the bcp_bindcbData parameter.

Nie można odczytać danych z SQL Serverdo zmiennych programu przy użyciu kopiowanie masowe; Brak nie przypomina funkcja "bcp_readrow". Można wysyłać tylko dane z aplikacji na serwerze.