Notatka
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Dotyczy:sql Server
Azure SQL Database
Azure SQL Managed Instance
Azure 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.