bcp_setcolfmt

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

Den bcp_setcolfmt funktionen ersätter bcp_colfmt. Vid specificering av kolumnkollationen måste bcp_setcolfmt funktionen användas. bcp_setbulkmode kan användas för att specificera mer än ett kolumnformat.

Denna funktion ger ett flexibelt sätt att specificera kolumnformatet i en bulkkopieringsoperation. Den används för att sätta individuella kolumnformatattribut. Varje anrop till bcp_setcolfmt anger ett kolumnformatattribut.

Funktionen bcp_setcolfmt specificerar källan eller målformatet för datan i en användarfil. När den används som källformat specificerar bcp_setcolfmt formatet på en befintlig datafil som används som datakälla i en bulkkopia till en tabell i SQL Server. När den används som målformat skapas datafilen med de kolumnformat som anges med bcp_setcolfmt.

Syntax

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

Arguments

hdbc
Är den masskopieringsaktiverade ODBC-anslutningshandtaget.

fält
Är det ordinala kolumnnummer för vilket egenskapen sätts.

egenskap
Är en av egenskapskonstanterna. Egenskapskonstanter definieras i denna tabell.

Property Value Description
BCP_FMT_TYPE BYTE Är datatypen för denna kolumn i användarfilen. Om den skiljer sig från datatypen i motsvarande kolumn i databastabellen, konverterar masskopiering datan om möjligt.

BCP_FMT_TYPE-parametern enumereras av de SQL Server datatyptokens i sqlncli.h, istället för ODBC C:s datatyp-enumeratorer. Till exempel kan du ange en teckensträng, ODBC-typ SQL_C_CHAR, med SQL-teckentypen som är specifik för SQL Server.

För att specificera standardrepresentationen för SQL Server-datatypen, sätt denna parameter till 0.

För en bulkkopiering från SQL Server till en fil, när BCP_FMT_TYPE är SQLDECIMAL eller SQLNUMERIC, om källkolumnen inte är decimal eller numerisk, används standardprecision och skala. Annars, om källkolumnen är decimal eller numerisk, används källkolumnens precision och skala.
BCP_FMT_INDICATOR_LEN INT Är längden i byte av indikatorn (prefixet).

Det är längden, i bytes, av en längd/noll-indikator inom kolumndatan. Giltiga indikatorlängdvärden är 0 (utan indikator), 1, 2 eller 4.

För att specificera användning av standardmasskopieringsindikatorn, ställ in denna parameter till SQL_VARLEN_DATA.

Indikatorer visas i minnet direkt före all data, och i datafilen direkt före den data de gäller för.

Om mer än ett sätt att specificera kolumnlängden i datafilen används (såsom en indikator och maximal kolumnlängd, eller en indikator och en terminatorsekvens), väljer bulkkopiering det som resulterar i minst mängd data som kopieras.

Datafiler som genereras genom masskopiering när ingen användarintervention justerar formatet på datan och innehåller indikatorer när kolumndata kan variera i längd eller när kolumnen kan acceptera NULL som värde.
BCP_FMT_DATA_LEN DBINT Är datans längd i byte (kolumnlängd)

Det är den maximala längden, i bytes, av denna kolumns data i användarfilen, exklusive längden på någon längdindikator eller terminator.

Att sätta BCP_FMT_DATA_LEN till SQL_NULL_DATA indikerar att alla värden i datafilkolumnen är, eller bör sättas till, NULL.

Att sätta BCP_FMT_DATA_LEN till SQL_VARLEN_DATA indikerar att systemet ska bestämma längden på data i varje kolumn. För vissa kolumner kan detta innebära att en längd-/nollindikator genereras som föregår data på en kopia från SQL Server, eller att indikatorn förväntas i data som kopieras till SQL Server.

För SQL Server tecken- och binära datatyper kan BCP_FMT_DATA_LEN vara SQL_VARLEN_DATA, SQL_NULL_DATA, 0 eller något positivt värde. Om BCP_FMT_DATA_LEN är SQL_VARLEN_DATA använder systemet antingen längdindikatorn, om den finns, eller en terminatorsekvens för att bestämma datans längd. Om både en längdindikator och en terminatorsekvens tillhandahålls, använder bulkkopiering den som resulterar i minst mängd data som kopieras. Om BCP_FMT_DATA_LEN är SQL_VARLEN_DATA, datatypen är en SQL Server tecken- eller binärtyp, och varken en längdindikator eller en terminatorsekvens specificeras, returnerar systemet ett felmeddelande.

Om BCP_FMT_DATA_LEN är 0 eller ett positivt värde använder systemet BCP_FMT_DATA_LEN som maximal datalängd. Om däremot, utöver en positiv BCP_FMT_DATA_LEN, finns en längdindikator eller terminatorsekvens, bestämmer systemet datalängden genom att använda den metod som ger minst mängd data kopierad.

BCP_FMT_DATA_LEN-värdet representerar antalet bytes data. Om teckendata representeras av Unicode-breda tecken, representerar ett positivt BCP_FMT_DATA_LEN parametervärde antalet tecken multiplicerat med storleken, i bytes, för varje tecken.
BCP_FMT_TERMINATOR LPCBYTE Pekare till terminatorsekvensen (antingen ANSI eller Unicode beroende på vad som är lämpligt) som ska användas för denna kolumn. Denna parameter är främst användbar för teckendatatyper eftersom alla andra typer har fast längd eller, i fallet med binär data, kräver en längdindikator för att korrekt registrera antalet byte som finns.

För att undvika att avsluta extraherad data, eller för att indikera att data i en användarfil inte termineras, sätt denna parameter till NULL.

Om mer än ett sätt att specificera en användarfils kolumnlängd används (såsom en terminator och en längdindikator, eller en terminator och maximal kolumnlängd), väljer bulkkopieringen det som resulterar i minst mängd data som kopieras.

Bulkkopierings-API:et utför Unicode-till-MBCS-teckenkonvertering vid behov. Man måste vara försiktig så att både terminatorbytesträngen och bytesträngens längd är korrekt inställda.
BCP_FMT_SERVER_COL INT Kolumnens ordinala position i databasen
BCP_FMT_COLLATION LPCSTR Sorteringsnamn.

pValue
Är pekaren på värdet som ska kopplas till fastigheten. Det tillåter att varje kolumnformategenskap kan sättas individuellt.

CBvalue
Är längden på egenskapsbufferten i bytes.

Returns

SUCCEED eller FAIL.

Remarks

Denna funktion ersätter bcp_colfmt funktionen. All funktionalitet i bcp_colfmt tillhandahålls i bcp_setcolfmt funktion. Dessutom tillhandahålls stöd för kolonnsortering. Det rekommenderas att följande kolumnformatattribut sätts i den ordning som anges nedan:

BCP_FMT_SERVER_COL

BCP_FMT_DATA_LEN

BCP_FMT_TYPE

Funktionen bcp_setcolfmt låter dig ange användarfilformatet för masskopior. För bulkkopiering innehåller ett format följande delar:

  • En mappning från användarfilkolumner till databaskolumner.

  • Datatypen för varje användarfilkolumn.

  • Längden på den valfria indikatorn för varje kolumn.

  • Den maximala längden av data per användarfilkolumn.

  • Den valfria avslutningsbytesekvensen för varje kolumn.

  • Längden på den valfria terminerande bytesekvensen.

Varje anrop till bcp_setcolfmt specificerar formatet för en kolumn i användarfilen. Till exempel, för att ändra standardinställningarna för tre kolumner i en femkolumnig användardatafil, anropa först bcp_columns(5) och sedan anropa bcp_setcolfmt fem gånger, där tre av dessa anrop sätter ditt anpassade format. För de återstående två anropen, sätt BCP_FMT_TYPE till 0 och ställ BCP_FMT_INDICATOR_LENGTH, BCP_FMT_DATA_LEN och cbValue till 0, SQL_VARLEN_DATA respektive 0. Denna procedur kopierar alla fem kolumner, tre med ditt anpassade format och två med standardformatet.

Den bcp_columns funktionen måste anropas innan bcp_setcolfmt anropas.

Du måste anropa bcp_setcolfmt en gång för varje egenskap i varje kolumn i användarfilen.

Du behöver inte kopiera all data i en användarfil till SQL Server-tabellen. För att hoppa över en kolumn, ange formatet på datan för kolumnen och sätt parametern BCP_FMT_SERVER_COL till 0. Om du vill hoppa över en kolumn måste du ange dess typ.

Funktionen bcp_writefmt kan användas för att behålla formatspecifikationen.

bcp_setcolfmt Stöd för förbättrade datum- och tidfunktioner

De typer som används med egenskapen BCP_FMT_TYPE för datum/tid-typer anges i Bulk Copy Changes for Enhanced Date and Time Types (OLE DB och ODBC).

Mer information finns i Förbättringar av datum och tid (ODBC).