Kopiowanie masowe ze zmiennych programu

Dotyczy:sql ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse Analytics

Możesz kopiować masowo bezpośrednio ze zmiennych programu. Po przydzieleniu zmiennych do przechowywania danych dla wiersza i wywołaniu bcp_init w celu rozpoczęcia kopii zbiorczej, wywołaj bcp_bind dla każdej kolumny, aby określić lokalizację i format zmiennej programowej, która ma być powiązana z kolumną. Wypełnij każdą zmienną danymi, a następnie wywołaj bcp_sendrow , aby wysłać jeden wiersz danych do serwera. Powtarzaj proces wypełniania zmiennych i wywoływania bcp_sendrow , aż wszystkie wiersze zostaną wysłane na serwer, a następnie wywołaj bcp_done , aby określić, że operacja jest zakończona.

Parametr pData bcp_bind zawiera adres zmiennej powiązanej z kolumną. Dane dla każdej kolumny można przechowywać na jeden z dwóch sposobów:

  • Przydziel jedną zmienną do przechowywania danych.

  • Przydziel zmienną wskaźnikową, a następnie natychmiast zmienną danych.

Zmienna wskaźnikowa wskazuje długość danych dla kolumn o zmiennej długości, a także wartości NULL, jeśli kolumna dopuszcza NULL. Jeśli używana jest tylko zmienna danych, adres tej zmiennej jest przechowywany w parametrze bcp_bindpData . Jeśli użyta jest zmienna wskaźnikowa, adres zmiennej wskaźnikowej jest przechowywany w parametrze bcp_bind pData. Funkcje kopiowania zbiorczego obliczają lokalizację zmiennej danych, dodając parametry bcp_bindcbIndicator i pData .

bcp_bind obsługuje trzy metody pracy z danymi o zmiennej długości:

  • Używaj cbData tylko z zmienną danych. Umieść długość danych w cbData. Za każdym razem, gdy zmienia się długość danych kopiowanych masowo, wywołaj bcp_collen , aby zresetować cbData. Jeśli używana jest jedna z pozostałych dwóch metod, określ SQL_VARLEN_DATA dla cbData. Jeśli wszystkie wartości danych dla kolumny są NULL, określ SQL_NULL_DATA dla cbData.

  • Używaj zmiennych wskaźnikowych. Gdy każda nowa wartość danych jest przenoszona do zmiennej danych, przechowuj długość tej wartości w zmiennej wskaźnikowej. Jeśli używana jest jedna z pozostałych dwóch metod, należy określić 0 dla cbIndicator.

  • Używaj wskaźników terminatora. Załaduj parametr pTerm bcp_bind adresem wzorca bitowego, który kończy dane. Jeśli używana jest jedna z pozostałych dwóch metod, określ NULL dla pTerm.

Wszystkie trzy metody mogą być używane w tym samym bcp_bind wywołaniu, w takim przypadku stosuje się specyfikację skutkującą najmniejszą kopią danych.

Parametr typubcp_bind wykorzystuje DB-Library identyfikatorów typów danych, a nie identyfikatorów typów danych ODBC. DB-Library identyfikatory typów danych są zdefiniowane w sqlncli.h do użycia z funkcją ODBC bcp_bind .

Funkcje kopiowania masowego nie obsługują wszystkich typów danych ODBC C. Na przykład funkcje kopiowania masowego nie obsługują struktury SQL_C_TYPE_TIMESTAMP ODBC, więc użyj SQLBindCol lub SQLGetData do konwersji danych ODBC SQL_TYPE_TIMESTAMP na zmienną SQL_C_CHAR. Jeśli następnie użyjesz bcp_bind z parametrem typu SQLCHARACTER, aby przypisać zmienną do kolumny SQL Server datetime, funkcje kopiowania masowego przekształcają klauzulę timestamp escape zmiennej znaku do właściwego formatu datetime.

Poniższa tabela przedstawia zalecane typy danych do wykorzystania przy mapowaniu z typu danych SQL ODBC na typ danych SQL Server.

Typ ODBC SQLdata Typ danych ODBC C bcp_bind parametr typu Typ danych programu SQL Server
SQL_CHAR SQL_C_CHAR SQLCHARACTER character

Char
SQL_VARCHAR SQL_C_CHAR SQLCHARACTER varchar

zmienna znakowa

Zmienność char

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 numeryczny
SQL_BIT SQL_C_BIT SQLBIT bit
SQL_TINYINT (podpisany) SQL_C_SSHORT SQLINT2 smallint
SQL_TINYINT (bez podpisu) SQL_C_UTINYINT SQLINT1 tinyint
SQL_SMALL_INT (podpisany) SQL_C_SSHORT SQLINT2 smallint
SQL_SMALL_INT (bez podpisu) SQL_C_SLONG SQLINT4 int

integer
SQL_INTEGER (podpisany) SQL_C_SLONG SQLINT4 int

integer
SQL_INTEGER (bez podpisu) SQL_C_CHAR SQLCHARACTER decimal

dec
SQL_BIGINT (podpisany i niepodpisany) SQL_C_CHAR SQLCHARACTER bigint
SQL_REAL SQL_C_FLOAT SQLFLT4 prawdziwy
SQL_FLOAT SQL_C_DOUBLE SQLFLT8 float
SQL_DOUBLE SQL_C_DOUBLE SQLFLT8 float
SQL_BINARY SQL_C_BINARY SQLBINARY binary

Znacznik czasu
SQL_VARBINARY SQL_C_BINARY SQLBINARY varbinary

Binarna zmienność
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_TYP_ZNACZNIKA_CZASU SQL_C_CHAR SQLCHARACTER datetime

smalldatetime
SQL_GUID SQL_C_GUID SQLUNIQUEID uniqueidentifier
SQL_INTERVAL_ SQL_C_CHAR SQLCHARACTER Char

SQL Server nie posiada typów danych z podpisem tinyint, niepodpisanym smallint ani unsigned int. Aby zapobiec utracie wartości danych podczas migracji tych typów, utwórz tabelę SQL Server z następnym co do wielkości typem danych całkowitoliczbowych. Aby zapobiec późniejszemu dodawaniu wartości poza zakresem dozwolonym przez oryginalny typ danych, zastosuj regułę do kolumny SQL Server, która ogranicza dopuszczalne wartości do zakresu obsługiwanego 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 obsługuje bezpośrednio typów danych interwałowych. Aplikacja może jednak przechowywać sekwencje przejścia interwałowego jako ciągi znaków w kolumnie znaków SQL Server. Aplikacja może je odczytać do późniejszego użytku, ale nie mogą być używane w Transact-SQL instrukcjach.

Funkcje kopiowania masowego mogą być używane do szybkiego ładowania danych do SQL Server, które zostały odczytane ze źródła danych ODBC. Użyj SQLBindCol , aby powiązać kolumny zbioru wyników ze zmiennymi programu, a następnie użyj bcp_bind do powiązania tych samych zmiennych programu z operacją kopiowania zbiorowego. Wywołanie SQLFetchScroll lub SQLFetch pobiera rząd danych ze źródła danych ODBC do zmiennych programowych i wywołuje bcp_sendrow masowo kopiuje dane ze zmiennych programu do SQL Server .

Aplikacja może używać funkcji bcp_colptr w dowolnym momencie, gdy musi zmienić adres zmiennej danych pierwotnie określoną w parametrze bcp_bindpData . Aplikacja może używać funkcji bcp_collen w dowolnym momencie, gdy musi zmienić pierwotnie określoną długość danych w parametrze bcp_bindcbData .

Nie można odczytać danych z SQL Server do zmiennych programu za pomocą kopii masowej; nie ma nic podobnego do funkcji "bcp_readrow". Możesz przesyłać tylko dane z aplikacji na serwer.