bcp_control

van toepassing op:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsAnalytics Platform System (PDW)

Verandert de standaardinstellingen voor verschillende controleparameters voor een bulkkopie tussen een bestand en SQL Server.

Syntax

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

Arguments

hdbc-
Is de ODBC-verbindingshandgreep waarvoor bulksgewijs kopiëren is ingeschakeld.

eOption
Is een van de volgende:

BCPABORT
Stopt een bulk-kopieeroperatie die al bezig is. Roep bcp_control aan met een e-optie van BCPABORT vanuit een andere thread om een lopende bulkkopie-operatie te stoppen. De iValue-parameter wordt genegeerd.

BCPBATCH
Is het aantal rijen per batch. De standaard is 0, wat aangeeft of alle rijen in een tabel wanneer data wordt geëxtraheerd, of alle rijen in het gebruikersgegevensbestand wanneer data wordt gekopieerd naar een SQL Server. Een waarde kleiner dan 1 zet BCPBATCH terug naar de standaard.

BCPDELAYREADFMT
Een Booleaan, als het op waar wordt gezet, zorgt ervoor dat bcp_readfmt bij executie leest. Als het onwaar is (de standaard), zal bcp_readfmt het formaatbestand onmiddellijk lezen. Er zal een sequentiefout optreden als BCPDELAYREADFMT waar is en je bcp_columns of bcp_setcolfmt aanroept.

Er zal ook een sequentiefout optreden als je BCPDELAYREADFMT aanroept bcp_control(hdbc,, (void *)FALSE) nadat je BCPDELAYREADFMT, (void *)TRUE) en bcp_writefmt hebt aangeroepenbcp_control(hdbc,.

Voor meer informatie, zie Metadata Discovery.

BCPFILECP
iValue bevat het nummer van de codepagina voor het databestand. Je kunt het nummer van de codepagina opgeven, zoals 1252 of 850, of een van deze waarden:

BCPFILE_ACP: de gegevens in het bestand staan in de Microsoft Windows codepagina van de client.

BCPFILE_OEMCP: de gegevens in het bestand staan in de OEM-codepagina van de client (standaard).

BCPFILE_RAW: gegevens in het bestand staan in de codepagina van de SQL Server.

BCPFILEFMT
Het versienummer van het databestandsformaat. Dit kan 80 zijn (SQL Server 2000 (8.x)), 90 (SQL Server 2005 (9.x)), 100 (SQL Server 2008 (10.0.x) of SQL Server 2008 R2 (10.50.x)), 110 (SQL Server 2012 (11.x)), of 120 (SQL Server 2014 (12.x)). 120 is de standaard. Dit is handig voor het exporteren en importeren van data in formaten die door eerdere versies van de server werden ondersteund. Om bijvoorbeeld data te importeren die afkomstig is van een tekstkolom in een SQL Server 2000 (8.x) server naar een varchar(max)-kolom in een SQL Server 2005 (9.x) of latere server, moet je 80 specificeren. Evenzo, als je 80 specificeert bij het exporteren van data uit een varchar(max)-kolom, worden deze opgeslagen zoals tekstkolommen worden opgeslagen in het SQL Server 2000 (8.x)-formaat, en kunnen ze worden geïmporteerd in een tekstkolom van een SQL Server 2000 (8.x)-server.

BCPFIRST
Is de eerste rij data om te fileren of de eerste tabel die gekopieerd moet worden. De standaard is 1; een waarde kleiner dan 1 zet deze optie terug naar de standaard.

BCPFIRSTEX
Voor BCP-outoperaties specificeert het de eerste rij van de databasetabel die naar het databestand wordt gekopieerd.

Voor BCP in bewerkingen specificeert de eerste rij van het databestand die naar de databasetabel wordt gekopieerd.

De iValue-parameter wordt verwacht het adres te zijn van een getekend 64-bits geheel getal met de waarde. De maximale waarde die aan BCPFIRSTEX kan worden doorgegeven is 2^63-1.

BCPFMTXML
Geeft aan dat het gegenereerde formaat bestand in XML-formaat moet zijn. Hij staat standaard uit.

XML-bestanden bieden meer flexibiliteit, maar met enkele extra beperkingen. Je kunt bijvoorbeeld niet tegelijkertijd het prefix en de terminator voor een veld specificeren, wat mogelijk was in oudere bestandsformaat.

Note

XML-bestanden worden alleen ondersteund wanneer SQL Server samen met SQL Server Native Client is geïnstalleerd.

BCPHINTS
iValue bevat een SQLTCHAR-tekenreekspointer. De geadresseerde string specificeert ofwel SQL Server bulkcopy-verwerkingshints of een Transact-SQL-instructie die een resultaatset teruggeeft. Als een Transact-SQL-instructie wordt gespecificeerd die meer dan één resultaatset teruggeeft, worden alle resultaatsets na de eerste genegeerd. Voor meer informatie over tips voor bulk-copy processing, zie bcp Utility.

BCPKEEPIDENTITY
Wanneer iValue TRUE is, specificeert dat bulk-kopieerfuncties datawaarden invoegen die zijn geleverd voor SQL Server-kolommen gedefinieerd met een identiteitsbeperking. Het invoerbestand moet waarden leveren voor de identiteitskolommen. Als dit niet is ingesteld, worden nieuwe identiteitswaarden gegenereerd voor de ingevoegde rijen. Alle gegevens die aanwezig zijn in het bestand voor de identiteitskolommen worden genegeerd.

BCPKEEPNULLS
Geeft aan of lege datawaarden in het bestand worden omgezet naar NULL-waarden in de SQL Server-tabel. Wanneer iValue TRUE is, worden lege waarden omgezet naar NULL in de SQL Server-tabel. De standaard is dat lege waarden worden omgezet naar een standaardwaarde voor de kolom in de SQL Server-tabel als er een standaard bestaat.

BCPLAST
Is de laatste rij om te kopiëren. De standaard is om alle rijen te kopiëren; een waarde kleiner dan 1 zet deze optie terug naar de standaard.

BCPLASTEX
Voor BCP-uitgangsoperaties specificeert de laatste rij van de databasetabel die naar het databestand wordt gekopieerd.

Voor BCP in bewerkingen specificeert het de laatste rij van het databestand die naar de databasetabel moet worden gekopieerd.

De iValue-parameter wordt verwacht het adres te zijn van een getekend 64-bits geheel getal met de waarde. De maximale waarde die aan BCPLASTEX kan worden doorgegeven is 2^63-1.

BCPMAXERRS
Is het aantal fouten dat is toegestaan voordat de bulk-kopieeroperatie faalt. De standaard is 10; een waarde kleiner dan 1 zet deze optie terug naar de standaard. Bulkkopieën leggen maximaal 65.535 fouten op. Een poging om deze optie op een waarde groter dan 65.535 te zetten, resulteert in een optiepercentage op 65.535.

BCPODBC
Wanneer TRUE, specificeert dat datetime- en smalldatetime-waarden die in tekenformaat worden opgeslagen, het ODBC-tijdstempel-ontsnappingssequentieprefix en -achtervoegsel gebruiken. De BCPODBC-optie geldt alleen voor DB_OUT.

Wanneer FOUT, wordt een datum-tijdwaarde die 1 januari 1997 vertegenwoordigt omgezet naar de tekenreeks: 1997-01-01 00:00:00.000. Wanneer WAAR, wordt dezelfde datum-tijdwaarde weergegeven als: {ts '1997-01-01 00:00:00.000'}.

BCPROWCOUNT
Geeft het aantal rijen terug dat door de huidige (of laatste) BCP-bewerking is beïnvloed.

BCPTEXTFILE
Wanneer TRUE, geeft aan dat het databestand een tekstbestand is, in plaats van een binair bestand. Als het bestand een tekstbestand is, bepaalt BCP of het Unicode is door de Unicode-bytemarker in de eerste twee bytes van het databestand te controleren.

BCPUNICODEFILE
Wanneer TRUE, geeft aan dat het invoerbestand een Unicode-bestand is.

iValue
Is de waarde voor de gespecificeerde eOption. iValue is een geheel getal (LONGLONG) waarde die naar een void pointer wordt gecast om toekomstige uitbreiding naar 64-bits waarden mogelijk te maken.

Returns

SLAGEN OF MISLUKKEN.

Remarks

Deze functie stelt verschillende controleparameters in voor bulkkopie-operaties, waaronder het aantal fouten dat is toegestaan voordat een bulkkopie wordt geannuleerd, het aantal van de eerste en laatste rij die uit een databestand gekopieerd moet worden, en de batchgrootte.

Deze functie wordt ook gebruikt om de SELECT-instructie te specificeren wanneer de resultaatset van een SELECT in bulk wordt gekopieerd vanuit SQL Server. Stel eOption in op BCPHINTS en stel iValue in met een pointer naar een SQLTCHAR-string met de SELECT-instructie.

Deze controleparameters zijn alleen betekenisvol bij het kopiëren tussen een gebruikersbestand en een SQL Server-tabel. Instellingen van de regelparameters hebben geen effect op rijen die met bcp_sendrow worden gekopieerd naar SQL Server.

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);