bcp_control

gäller för:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse Analytics

Ändrar standardinställningarna för olika kontrollparametrar för en bulkkopia mellan en fil och SQL Server.

Syntax

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

Arguments

hdbc
Är den masskopieringsaktiverade ODBC-anslutningshandtaget.

eOption
Är en av följande:

BCPABORT
Stoppar en bulkkopieringsoperation som redan pågår. Anropa bcp_control med ett e-alternativ på BCPABORT från en annan tråd för att stoppa en pågående bulkkopieringsoperation. iValue-parametern ignoreras.

BCPBATCH
Är antalet rader per batch. Standardvärdet är 0, vilket indikerar antingen alla rader i en tabell när data extraheras, eller alla rader i användardatafilen när data kopieras till en SQL Server. Ett värde mindre än 1 återställer BCPBATCH till standard.

BCPDELAYREADFMT
En boolesk bok, om den sätts till sann, får bcp_readfmt att läsa vid exekutionen. Om det är falskt (standarden) kommer bcp_readfmt omedelbart att läsa formatfilen. Ett sekvensfel uppstår om BCPDELAYREADFMT är sant och du anropar bcp_columns eller bcp_setcolfmt.

Ett sekvensfel uppstår också om du anropar bcp_control(hdbc, BCPDELAYREADFMT, (void *)FALSE) efter att ha anropat bcp_control(hdbc, BCPDELAYREADFMT, (void *)TRUE) och bcp_writefmt.

För mer information, se Metadata Discovery.

BCPFILECP
iValue innehåller numret på kodsidan för datafilen. Du kan ange numret på kodsidan, till exempel 1252 eller 850, eller något av dessa värden:

BCPFILE_ACP: data i filen finns på klientens Microsoft Windows kodsida.

BCPFILE_OEMCP: data i filen finns på OEM-kodsidan för klienten (standard).

BCPFILE_RAW: data i filen finns på kodsidan för SQL Server.

BCPFILEFMT
Versionsnumret för datafilformatet. Detta kan vara 80 (SQL Server 2000 (8.x)), 90 (SQL Server 2005 (9.x)), 100 (SQL Server 2008 (10.0.x) eller SQL Server 2008 R2 (10.50.x)), 110 (SQL Server 2012 (11.x)), eller 120 (SQL Server 2014 (12.x)). 120 är standard. Detta är användbart för att exportera och importera data i format som stöddes av tidigare versioner av servern. Till exempel, för att importera data som hämtats från en textkolumn i en SQL Server 2000 (8.x)-server till en varchar(max)-kolumn i en SQL Server 2005 (9.x) eller senare, bör du ange 80. På samma sätt, om du anger 80 när du exporterar data från en varchar(max)-kolumn, sparas det precis som textkolumner sparas i SQL Server 2000 (8.x)-formatet, och kan importeras till en textkolumn på en SQL Server 2000 (8.x)-server.

BCPFIRST
Är den första dataraden att fila eller tabellen att kopiera. Standarden är 1; ett värde mindre än 1 återställer detta alternativ till dess standard.

BCPFIRSTEX
För BCP-utoperationer specificeras den första raden i databastabellen som ska kopieras till datafilen.

För BCP i operationer specificeras den första raden i datafilen som ska kopieras till databastabellen.

iValue-parametern förväntas vara adressen till ett signerat 64-bitars heltal som innehåller värdet. Det maximala värdet som kan skickas till BCPFIRSTEX är 2^63-1.

BCPFMTXML
Specificerar att den genererade formatfilen ska vara i XML-format. Den är avstängd som standard.

XML-formatfiler ger större flexibilitet men med vissa extra begränsningar. Till exempel kan du inte ange prefix och terminator för ett fält samtidigt, vilket var möjligt i äldre formatfiler.

Note

XML-formatfiler stöds endast när SQL Server är installerad tillsammans med SQL Server Native Client.

BCPHINTS
iValue innehåller en SQLTCHAR-teckensträngspekare. Den adresserade strängen specificerar antingen SQL Server-masskopieringstips eller en Transact-SQL-sats som returnerar en resultatuppsättning. Om ett Transact-SQL-uttryck anges som returnerar mer än en resultatmängd ignoreras alla resultatuppsättningar efter den första. För mer information om tips för masskopiering, se bcp Utility.

BCPKEEPIDENTITET
När iValue är TRUE, specificerar att bulkkopieringsfunktioner infogar datavärden som tillhandahålls för SQL Server-kolumner definierade med en identitetsbegränsning. Inmatningsfilen måste tillhandahålla värden för identitetskolumnerna. Om detta inte är satt genereras nya identitetsvärden för de insatta raderna. All data som finns i filen för identitetskolumnerna ignoreras.

BCPKEEPNULLS
Specificerar om tomma datavärden i filen ska konverteras till NULL-värden i SQL Server-tabellen. När iValue är TRUE konverteras tomma värden till NULL i SQL Server-tabellen. Standardvärdet är att tomma värden konverteras till ett standardvärde för kolumnen i SQL Server-tabellen om en standard finns.

BCPLAST
Är sista raden att kopiera. Standarden är att kopiera alla rader; ett värde mindre än 1 återställer detta alternativ till dess standard.

BCPLASTEX
För BCP-utoperationer specificeras den sista raden i databastabellen som ska kopieras till datafilen.

För BCP i operationer specificeras den sista raden i datafilen som ska kopieras till databastabellen.

iValue-parametern förväntas vara adressen till ett signerat 64-bitars heltal som innehåller värdet. Det maximala värdet som kan överföras till BCPLASTEX är 2^63-1.

BCPMAXERRS
Är antalet tillåtna fel innan bulkkopieringsoperationen misslyckas. Standardvärdet är 10; ett värde mindre än 1 återställer detta alternativ till dess standard. Bulkkopiering innebär maximalt 65 535 fel. Ett försök att sätta detta alternativ till ett värde större än 65 535 resulterar i att optionen sätts till 65 535.

BCPODBC
När TRUE anges att datetime- och smalldatetime-värden sparade i teckenformat använder ODBC:s tidsstämpel för flyktsekvensprefix och suffix. BCPODBC-alternativet gäller bara för DB_OUT.

När FALSKT konverteras ett datum-tidsvärde som representerar 1 januari 1997 till teckensträngen: 1997-01-01 00:00:00.000. När TRUE representeras samma datum-tid-värde som: {ts '1997-01-01 00:00:00.000'}.

BCPROWCOUNT
Returnerar antalet rader som påverkats av den nuvarande (eller sista) BCP-operationen.

BCPTEXTFIL
När TRUE anges att datafilen är en textfil snarare än en binär fil. Om filen är en textfil avgör BCP om det är Unicode eller inte genom att kontrollera Unicode-bytemarkören i de två första bytena av datafilen.

BCPUNICODEFILE
När TRUE anges att indatafilen är en Unicode-fil.

iValue
Är värdet för den specificerade eOptionen. iValue är ett heltalsvärde (LONGLONG) som kastas till en voidpekare för att möjliggöra framtida expansion till 64-bitars värden.

Returns

SUCCEED eller FAIL.

Remarks

Denna funktion sätter olika kontrollparametrar för bulkkopieringsoperationer, inklusive antalet fel som tillåts innan en bulkkopia avbryts, antalet rader som ska kopieras från en datafil och batchstorleken.

Denna funktion används också för att specificera SELECT-satsen när man bulkkopierar resultatuppsättningen av en SELECT från SQL Server. Sätt eOption till BCPHINTS och ställ in iValue att ha en pekare till en SQLTCHAR-sträng som innehåller SELECT-satsen.

Dessa kontrollparametrar är endast meningsfulla vid kopiering mellan en användarfil och en SQL Server-tabell. Inställningar för kontrollparametrar påverkar inte rader som kopieras till SQL Server med 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);