bcp_control

Dotyczy:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsAnalytics Platform System (PDW)

Zmienia domyślne ustawienia różnych parametrów sterowania dla kopii masowej między plikiem a SQL Server.

Syntax

  
RETCODE bcp_control (  
        HDBC hdbc,  
        INT eOption,  
        void* iValue);  

Arguments

hdbc
Czy obsługa połączenia ODBC z obsługą kopiowania zbiorczego.

eOption
Jest jednym z następujących przypadków:

BCPABORT
Zatrzymuje operację masowego kopiowania, która już trwa. Zadzwoń bcp_controleOption BCPABORT z innego wątku, aby zatrzymać operację masowego kopiowania. Parametr iValue jest ignorowany.

BCPBATCH
To liczba wierszy w partii. Domyślnie to 0, co oznacza albo wszystkie wiersze w tabeli, gdy dane są wyodrębniane, albo wszystkie wiersze w pliku danych użytkownika, gdy dane są kopiowane do SQL Server. Wartość mniejsza niż 1 resetuje BCPBATCH do domyślnego.

BCPDELAYREADFMT
Wartość booleuszka, jeśli zostanie ustawiona na prawdziwą, spowoduje, że bcp_readfmt odczyta podczas egzekucji. Jeśli jest to fałszywe (domyślnie), bcp_readfmt natychmiast odczyta plik formatowany. Błąd sekwencji wystąpi, jeśli BCPDELAYREADFMT jest prawdziwy i wywołasz bcp_columns lub bcp_setcolfmt.

Błąd sekwencji wystąpi również, jeśli wywołasz bcp_control(hdbc, BCPDELAYREADFMT, (void *)FALSE) po wywołaniu bcp_control(hdbc, BCPDELAYREADFMT, (void *)TRUE) i bcp_writefmt.

Więcej informacji można znaleźć w sekcji Metadata Discovery.

BCPFILECP
iValue zawiera numer strony kodowej pliku danych. Możesz określić numer strony kodowej, na przykład 1252 lub 850, lub jedną z tych wartości:

BCPFILE_ACP: dane w pliku znajdują się na Microsoft Windows stronie kodowej klienta.

BCPFILE_OEMCP: dane w pliku znajdują się na stronie kodowej OEM klienta (domyślnie).

BCPFILE_RAW: dane w pliku znajdują się na stronie kodowej SQL Server.

BCPFILEFMT
Numer wersji formatu pliku danych. Może to być 80 (SQL Server 2000 (8.x)), 90 (SQL Server 2005 (9.x)), 100 (SQL Server 2008 (10.0.x) lub SQL Server 2008 R2 (10.50.x)), 110 (SQL Server 2012 (11.x)) lub 120 (SQL Server 2014 (12.x)). 120 to domyślna cena. Jest to przydatne przy eksportowaniu i importowaniu danych w formatach obsługiwanych przez wcześniejsze wersje serwera. Na przykład, aby zaimportować dane uzyskane z kolumny tekstowej na serwerze SQL Server 2000 (8.x) do kolumny varchar(max) na serwerze SQL Server 2005 (9.x) lub nowszym, należy podać 80. Podobnie, jeśli podczas eksportu danych z kolumny varchar(max) podasz 80, zostaną one zapisane tak samo jak kolumny tekstowe w formacie SQL Server 2000 (8.x) i można je zaimportować do kolumny tekstowej serwera SQL Server 2000 (8.x).

BCPFIRST
To pierwszy wiersz danych do pliku lub tabela do skopiowania. Domyślna wersja to 1; wartość mniejsza niż 1 resetuje tę opcję do domyślnej.

BCPFIRSTEX
Dla operacji BCP out określa pierwszy wiersz tabeli bazy danych, który ma się skopiować do pliku danych.

Dla BCP w operacjach określa się pierwszy wiersz pliku danych, który ma się skopiować do tabeli bazy danych.

Parametr iValue powinien być adresem 64-bitowej liczby całkowitej ze znakiem, zawierającej tę wartość. Maksymalna wartość, którą można przekazać BCPFIRSTEX, to 2^63-1.

BCPFMTXML
Określa, że wygenerowany plik formatowy powinien być w formacie XML. Domyślnie jest wyłączony.

Pliki w formacie XML zapewniają większą elastyczność, ale z pewnymi dodatkowymi ograniczeniami. Na przykład nie można jednocześnie określić prefiksu i terminatora dla pola, co było możliwe w starszych formatach plików.

Note

Pliki w formacie XML są obsługiwane tylko wtedy, gdy SQL Server jest zainstalowany wraz z natywnym klientem SQL Server.

BCPHINTS
iValue zawiera wskaźnik znaków SQLTCHAR. Adresowany ciąg oznacza albo podpowiedzi do masowego przetwarzania kopiowania SQL Servera, albo instrukcję Transact-SQL zwracającą zestaw wyników. Jeśli podano potwierdzenie Transact-SQL, które zwraca więcej niż jeden zbiór wyników, wszystkie zbiory wyników po pierwszym są ignorowane. Więcej informacji o wskazówkach dotyczących masowego przetwarzania kopiowania można znaleźć w bcp Utility.

BCPKEEPIDENTITY
Gdy iValue jest PRAWDZIWA, określa, że funkcje kopiowania masowego wstawiają wartości danych dla kolumn SQL Server zdefiniowanych z ograniczeniem tożsamości. Plik wejściowy musi dostarczać wartości dla kolumn tożsamości. Jeśli nie jest to ustawione, generowane są nowe wartości tożsamości dla wstawionych wierszy. Wszelkie dane obecne w pliku dla kolumn tożsamości są ignorowane.

BCPKEEPNULLS
Określa, czy puste wartości danych w pliku zostaną przekształcone w wartości NULL w tabeli SQL Server. Gdy wartość iWartość jest PRAWDZIWA, wartości puste zostaną przekształcone w NULL w tabeli SQL Server. Domyślnie puste wartości konwertują się na domyślną wartość kolumny w tabeli SQL Server, jeśli istnieje domyślna.

BCPLAST
To ostatni wiersz do skopiowania. Domyślnie kopiuje się wszystkie wiersze; wartość mniejsza niż 1 resetuje tę opcję do domyślnej.

BCPLASTEX
Dla operacji BCP out określa ostatni wiersz tabeli bazy danych, który ma się skopiować do pliku danych.

Dla BCP w operacjach określa ostatni wiersz pliku danych do skopiowania do tabeli bazy danych.

Parametr iValue powinien być adresem 64-bitowej liczby całkowitej ze znakiem, zawierającej tę wartość. Maksymalna wartość, którą można przekazać BCPLASTEX, wynosi 2^63-1.

BCPMAXERRS
To liczba błędów dozwolonych przed niepowodzeniem operacji kopiowania masowego. Domyślnie 10; wartość mniejsza niż 1 resetuje tę opcję do domyślnej. Kopia masowa nakłada maksymalnie 65 535 błędów. Próba ustawienia tej opcji na wartość większą niż 65 535 skutkuje ustawieniem opcji na 65 535.

BCPODBC
Gdy TRUE, określa, że wartości datetime i smalldatetime zapisane w formacie znaków będą używać prefiksu sekwencji escape i sufiksu ODBC timestamp timestamp. Opcja BCPODBC dotyczy tylko DB_OUT.

Gdy FALSE, wartość data i czas reprezentująca 1 stycznia 1997 jest przekształcana w ciąg znaków: 1997-01-01 00:00:00.000. Gdy jest TRUE, ta sama wartość czasu jest reprezentowana jako: {ts '1997-01-01 00:00:00.000'}.

BCPROWCOUNT
Zwraca liczbę wierszy dotkniętych aktualną (lub ostatnią) operacją BCP.

BCPTEXTFILE
Gdy jest TRUE, określa, że plik danych jest plikiem tekstowym, a nie binarnym. Jeśli plik jest plikiem tekstowym, BCP określa, czy jest to Unicode, sprawdzając marker bajtu Unicode w pierwszych dwóch bajtach pliku danych.

BCPUNICODEFILE
Gdy jest TRUE, określa, że plik wejściowy jest plikiem Unicode.

iValue
To wartość dla określonej eOption. iValue to wartość całkowita (LONGLONG) rzucana na wskaźnik pustki, umożliwiającą przyszłe rozszerzenie do wartości 64-bitowych.

Zwroty

POWODZENIE lub NIEPOWODZENIE.

Remarks

Funkcja ta ustawia różne parametry sterujące dla operacji kopiowania masowego, w tym liczbę błędów dozwolonych przed anulowaniem kopii masowej, liczbę pierwszych i ostatnich wierszy do kopiowania z pliku danych oraz rozmiar partii.

Funkcja ta służy również do określania instrukcji SELECT podczas masowego kopiowania z SQL Server zbioru wyników pliku SELECT. Ustaw eOption na BCPHINTS i iValue tak, aby wskaźnik do ciągu SQLTCHAR zawierał polecenie SELECT.

Te parametry sterujące mają znaczenie tylko podczas kopiowania między plikiem użytkownika a tabelą SQL Server. Ustawienia parametrów sterujących nie mają wpływu na wiersze skopiowane do SQL Server bcp_sendrow.

Example

// Variables like henv not specified.  
SQLHDBC      hdbc;  
DBINT      nRowsProcessed;  
  
// Application initiation, get an ODBC environment handle, allocate the  
// hdbc, and so on.  
...   
  
// Enable bulk copy prior to connecting on allocated hdbc.  
SQLSetConnectAttr(hdbc, SQL_COPT_SS_BCP, (SQLPOINTER) SQL_BCP_ON,  
   SQL_IS_INTEGER);  
  
// Connect to the data source, return on error.  
if (!SQL_SUCCEEDED(SQLConnect(hdbc, _T("myDSN"), SQL_NTS,  
   _T("myUser"), SQL_NTS, _T("myPwd"), SQL_NTS)))  
   {  
   // Raise error and return.  
   return;  
   }  
  
// Initialize bulk copy.   
if (bcp_init(hdbc, _T("address"), _T("address.add"), _T("addr.err"),  
   DB_IN) == FAIL)  
   {  
   // Raise error and return.  
   return;  
   }  
  
// Set the number of rows per batch.   
if (bcp_control(hdbc, BCPBATCH, (void*) 1000) == FAIL)  
   {  
   // Raise error and return.  
   return;  
   }  
  
// Set file column count.   
if (bcp_columns(hdbc, 1) == FAIL)  
   {  
   // Raise error and return.  
   return;  
   }  
  
// Set the file format.   
if (bcp_colfmt(hdbc, 1, 0, 0, SQL_VARLEN_DATA, '\n', 1, 1)  
   == FAIL)  
   {  
   // Raise error and return.  
   return;  
   }  
  
// Execute the bulk copy.   
if (bcp_exec(hdbc, &nRowsProcessed) == FAIL)  
   {  
   // Raise error and return.  
   return;  
   }  
  
printf_s("%ld rows processed by bulk copy.", nRowsProcessed);