bcp_setcolfmt

Van toepassing op:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse Analytics

De bcp_setcolfmt functie vervangt de bcp_colfmt. Bij het specificeren van de kolomcollatie moet de bcp_setcolfmt functie worden gebruikt. bcp_setbulkmode kan worden gebruikt om meer dan één kolomformaat op te geven.

Deze functie biedt een flexibele aanpak om het kolomformaat te specificeren in een bulk-kopieeroperatie. Het wordt gebruikt om individuele kolomformaatattributen in te stellen. Elke aanroep naar bcp_setcolfmt stelt één kolomformaatattribuut in.

De bcp_setcolfmt functie specificeert het bron- of doelformaat van de data in een gebruikersbestand. Wanneer het als bronformaat wordt gebruikt, specificeert bcp_setcolfmt het formaat van een bestaand databestand dat als databron wordt gebruikt in een bulkkopie naar een tabel in SQL Server. Wanneer het als doelformaat wordt gebruikt, wordt het databestand aangemaakt met de kolomformaten die zijn gespecificeerd met bcp_setcolfmt.

Syntax

  
RETCODE bcp_setcolfmt (  
        HDBC hdbc,  
        INT field,  
        INT property,  
        void* pValue,  
        INT cbValue);  

Arguments

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

veld
Is het ordinaal kolomnummer waarvoor de eigenschap wordt ingesteld.

eigenschap
Is een van de eigenschapsconstanten. Eigenschapsconstanten zijn gedefinieerd in deze tabel.

Property Value Description
BCP_FMT_TYPE BYTE Is het datatype van deze kolom in het gebruikersbestand. Als het verschilt van het datatype van de overeenkomstige kolom in de databasetabel, converteert bulk copy de data indien mogelijk.

De BCP_FMT_TYPE-parameter wordt opgesomd door de SQL Server datatypetokens in sqlncli.h, in plaats van door de ODBC C-datatype-enumerators. Je kunt bijvoorbeeld een tekenstring specificeren, ODBC-type SQL_C_CHAR, met het SQLCHARACTER-type dat specifiek is voor SQL Server.

Om de standaard gegevensrepresentatie voor het SQL Server-datatype te specificeren, zet deze parameter op 0.

Voor een bulkkopie uit SQL Server naar een bestand, wanneer BCP_FMT_TYPE SQLDECIMAAL of SQLNUMERISCH is, worden de standaardprecisie en schaal gebruikt als de bronkolom niet decimaal of numeriek is. Anders, als de bronkolom decimaal of numeriek is, worden de precisie en schaal van de bronkolom gebruikt.
BCP_FMT_INDICATOR_LEN INT Is de lengte in bytes van de indicator (prefix).

Het is de lengte, in bytes, van een lengte/nul-indicator binnen de kolomgegevens. Geldige indicatorlengtewaarden zijn 0 (zonder indicator), 1, 2 of 4.

Om het gebruik van de standaard bulk copy indicator te specificeren, zet deze parameter op SQL_VARLEN_DATA.

Indicatoren verschijnen in het geheugen direct vóór alle data, en in het databestand direct vóór de data waarop ze van toepassing zijn.

Als meer dan één manier wordt gebruikt om de kolomlengte van een databestand te specificeren (zoals een indicator en een maximale kolomlengte, of een indicator en een terminatorsequentie), kiest de bulkkopie degene die resulteert in de minste hoeveelheid data.

Databestanden die door bulkkopieën worden gegenereerd wanneer geen gebruikersinterventie het formaat van de data aanpast, bevatten indicatoren wanneer de kolomgegevens in lengte kunnen variëren of wanneer de kolom NULL als waarde kan accepteren.
BCP_FMT_DATA_LEN DBINT Is de lengte in bytes van de data (kolomlengte)

Het is de maximale lengte, in bytes, van de gegevens van deze kolom in het gebruikersbestand, exclusief de lengte van een lengte-indicator of terminator.

Het instellen van BCP_FMT_DATA_LEN op SQL_NULL_DATA geeft aan dat alle waarden in de databestandkolom NULL zijn, of moeten worden ingesteld.

Het instellen van BCP_FMT_DATA_LEN op SQL_VARLEN_DATA geeft aan dat het systeem de lengte van de gegevens in elke kolom moet bepalen. Voor sommige kolommen kan dit betekenen dat een lengte/nul-indicator wordt gegenereerd om data te voorafgaan aan een kopie van SQL Server, of dat de indicator wordt verwacht in data die naar SQL Server wordt gekopieerd.

Voor SQL Server teken- en binaire datatypes kan BCP_FMT_DATA_LEN SQL_VARLEN_DATA, SQL_NULL_DATA, 0 of een positieve waarde zijn. Als BCP_FMT_DATA_LEN SQL_VARLEN_DATA is, gebruikt het systeem ofwel de lengte-indicator, indien aanwezig, of een terminatorsequentie om de lengte van de data te bepalen. Als zowel een lengte-indicator als een terminatorsequentie worden geleverd, gebruikt bulk copy de sequentie die resulteert in de minimale hoeveelheid data. Als BCP_FMT_DATA_LEN SQL_VARLEN_DATA is, het datatype een SQL Server teken of binair type is, en er noch een lengteindicator noch een terminatorsequentie is opgegeven, geeft het systeem een foutmelding terug.

Als BCP_FMT_DATA_LEN 0 is of een positieve waarde, gebruikt het systeem BCP_FMT_DATA_LEN als maximale gegevenslengte. Als er echter naast een positieve BCP_FMT_DATA_LEN een lengte-indicator of terminatorsequentie wordt geleverd, bepaalt het systeem de gegevenslengte door de methode te gebruiken die resulteert in de minimale hoeveelheid data.

De BCP_FMT_DATA_LEN-waarde geeft het aantal bytes aan data weer. Als tekengegevens worden weergegeven door Unicode-brede tekens, dan vertegenwoordigt een positieve BCP_FMT_DATA_LEN-parameterwaarde het aantal tekens vermenigvuldigd met de grootte, in bytes, van elk teken.
BCP_FMT_TERMINATOR LPCBYTE Wijs naar de terminatorsequentie (ofwel ANSI of Unicode, afhankelijk van van toepassing) die voor deze kolom gebruikt moet worden. Deze parameter is vooral nuttig voor tekendatatypes omdat alle andere typen een vaste lengte hebben of, in het geval van binaire gegevens, een lengteindicator vereisen om het aantal aanwezige bytes nauwkeurig vast te leggen.

Om te voorkomen dat de geëxtraheerde data wordt beëindigd, of om aan te geven dat gegevens in een gebruikersbestand niet worden beëindigd, zet deze parameter op NULL.

Als er meer dan één manier wordt gebruikt om een kolomlengte van een gebruikersbestand te specificeren (zoals een terminator en een lengte-indicator, of een terminator en een maximale kolomlengte), kiest de bulkkopie degene die resulteert in de minste hoeveelheid data die wordt gekopieerd.

De bulk copy API voert Unicode-naar-MBCS tekenconversie uit waar nodig. Er moet zorgvuldig op worden gelet dat zowel de terminatorbytestring als de lengte van de bytestring correct zijn ingesteld.
BCP_FMT_SERVER_COL INT Ordinaalpositie van de kolom in de database
BCP_FMT_COLLATION LPCSTR Sorteringsnaam.

pValue
Is de aanwijzer naar de waarde die aan de eigendom wordt gekoppeld. Het maakt het mogelijk om elke kolomformaateigenschap individueel in te stellen.

CBvalue
Is de lengte van de property buffer in bytes.

Returns

SLAGEN OF MISLUKKEN.

Remarks

Deze functie vervangt de bcp_colfmt functie. Alle functionaliteit van bcp_colfmt wordt in bcp_setcolfmt functie geboden. Daarnaast wordt er ook ondersteuning voor kolomcollatie geboden. Het wordt aanbevolen om de volgende kolomformaatattributen in de onderstaande volgorde te zetten:

BCP_FMT_SERVER_COL

BCP_FMT_DATA_LEN

BCP_FMT_TYPE

De bcp_setcolfmt functie stelt je in staat het gebruikersbestandsformaat voor bulkkopieën te specificeren. Voor bulkkopieën bevat een formaat de volgende onderdelen:

  • Een mapping van kolommen in gebruikersbestanden naar databasekolommen.

  • Het datatype van elke gebruikersbestandkolom.

  • De lengte van de optionele indicator voor elke kolom.

  • De maximale lengte van gegevens per kolom in het gebruikersbestand.

  • De optionele beëindigingsbyte-sequentie voor elke kolom.

  • De lengte van de optionele terminerende bytesequentie.

Elke aanroep naar bcp_setcolfmt specificeert het formaat voor één kolom in het gebruikersbestand. Om bijvoorbeeld de standaardinstellingen voor drie kolommen in een gebruikersdatabestand met vijf kolommen te wijzigen, roep je eerst bcp_columns(5) aan en roep je vervolgens vijf keer bcp_setcolfmt aan, waarbij drie van die aanroepen je aangepaste formaat bepalen. Voor de overige twee calls zet BCP_FMT_TYPE op 0, en zet BCP_FMT_INDICATOR_LENGTH, BCP_FMT_DATA_LEN en cbValue respectievelijk op 0, SQL_VARLEN_DATA en 0. Deze procedure kopieert alle vijf kolommen, drie met je aangepaste formaat en twee met het standaardformaat.

De bcp_columns functie moet worden aangeroepen voordat bcp_setcolfmt wordt aangeroepen.

Je moet bcp_setcolfmt één keer aanroepen voor elke eigenschap van elke kolom in het gebruikersbestand.

Je hoeft niet alle data uit een gebruikersbestand te kopiëren naar de SQL Server-tabel. Om een kolom over te slaan, specificeer je het formaat van de gegevens voor die kolom en zet je de parameter BCP_FMT_SERVER_COL op 0. Als je een kolom wilt overslaan, moet je het type specificeren.

De bcp_writefmt-functie kan worden gebruikt om de formaatspecificatie te behouden.

bcp_setcolfmt Ondersteuning voor verbeterde datum- en tijdfuncties

De typen die met de BCP_FMT_TYPE-eigenschap worden gebruikt voor datum-/tijdtypes zijn gespecificeerd in Bulk Copy Changes for Enhanced Date and Time Types (OLE DB en ODBC).

Zie ODBC-(Datum- en tijdverbeteringen) voor meer informatie.