bcp_colfmt

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

Określa źródłowy lub docelowy format danych w pliku użytkownika. Gdy jest używany jako format źródłowy, bcp_colfmt określa format istniejącego pliku danych używanego jako źródło danych w kopii masowej do tabeli SQL Server. Gdy jest używany jako format docelowy, plik danych jest tworzony w formatach kolumn określonych bcp_colfmt.

Syntax

  
RETCODE bcp_colfmt (  
        HDBC hdbc,  
        INT idxUserDataCol,  
        BYTE eUserDataType,  
        INT cbIndicator,  
        DBINT cbUserData,  
        LPCBYTE pUserDataTerm,  
        INT cbUserDataTerm,  
        INT idxServerCol);  

Arguments

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

idxUserDataCol
To numer kolumny poręcznej w pliku danych użytkownika, dla którego określany jest format. Pierwsza kolumna to 1.

eUserDataType
Jest typem danych tej kolumny w pliku użytkownika. Jeśli różni się od typu danych odpowiadającej kolumny w tabeli bazy danych (idxServerColumn), kopia masowa konwertuje dane, jeśli to możliwe.

SQL Server 2005 (9.x) wprowadził wsparcie dla tokenów typów danych SQLXML i SQLUDT w parametrze eUserDataType.

Parametr eUserDataType jest wyliczany przez tokeny typów danych SQL Server w sqlncli.h, a nie przez enumeratory typu danych ODBC C. Na przykład możesz określić ciąg znaków, ODBC typ SQL_C_CHAR, używając specyficznego dla SQL Server typu SQLCHARACTER.

Aby określić domyślną reprezentację danych dla typu danych SQL Server, ustaw ten parametr na 0.

Dla kopii masowej z SQL Server do pliku, gdy eUserDataType jest SQLDECIMAL lub SQLNUMERIC:

  • Jeśli kolumna źródłowa nie jest dziesiętna ani liczbowa, stosuje się domyślną precyzję i skalę.

  • Jeśli kolumna źródłowa jest dziesiętna lub numeryczna, stosuje się precyzję i skalę kolumny źródłowej.

cbIndicator
To długość w bajtach wskaźnika długości/zera w danych kolumny. Prawidłowe wartości długości wskaźnika to 0 (przy braku wskaźnika), 1, 2, 4 lub 8.

Aby określić domyślne zużycie w wskaźniku kopiowania masowego, ustaw ten parametr na SQL_VARLEN_DATA.

Wskaźniki pojawiają się w pamięci bezpośrednio przed danymi oraz w pliku danych bezpośrednio przed danymi, do których się odnoszą.

Jeśli używa się więcej niż jednego sposobu określania długości kolumny pliku danych (np. wskaźnika i maksymalnej długości kolumny lub wskaźnika i sekwencji terminatora), kopia masowa wybiera taki, który skutkuje najmniejszą kopią danych.

Pliki danych generowane przez kopiowanie masowe, gdy żadna interwencja użytkownika nie zmienia formatu danych, zawierają wskaźniki, gdy dane kolumny mogą się różnić długością lub gdy kolumna może przyjmować wartość NULL.

cbUserData
Jest maksymalną długością, w bajtach, danych tej kolumny w pliku użytkownika, nie licząc długości żadnego wskaźnika długości ani terminatora.

Ustawienie cbUserData na SQL_NULL_DATA oznacza, że wszystkie wartości w kolumnie pliku danych są lub powinny być ustawione na NULL.

Ustawienie cbUserData na SQL_VARLEN_DATA oznacza, że system powinien określać długość danych w każdej kolumnie. W przypadku niektórych kolumn może to oznaczać, że wskaźnik długości/zera jest generowany poprzedzając dane w kopii z SQL Server lub że wskaźnik ten jest oczekiwany w danych skopiowanych do SQL Server.

Dla SQL Server znaków i typów danych binarnych cbUserData może mieć wartość SQL_VARLEN_DATA, SQL_NULL_DATA, 0 lub mieć jakąś dodatnią wartość. Jeśli cbUserData jest SQL_VARLEN_DATA, system używa albo wskaźnika długości, jeśli jest obecny, albo sekwencji terminatora do określenia długości danych. Jeśli dostarczone są zarówno wskaźnik długości, jak i sekwencja terminatora, kopia masowa wykorzystuje taką, która skutkuje najmniejszą kopią danych. Jeśli cbUserData jest SQL_VARLEN_DATA, typ danych jest znakiem SQL Server lub typem binarnym, a nie podano ani wskaźnika długości, ani sekwencji terminatora, system zwraca komunikat o błędzie.

Jeśli cbUserData wynosi 0 lub jest wartością dodatnią, system używa cbUserData jako maksymalnej długości danych. Jednak jeśli oprócz dodatniego cbUserData zostanie dostarczony wskaźnik długości lub sekwencja terminatora, system określa długość danych metodą stosującą najmniej kopiowanych danych.

Wartość cbUserData oznacza liczbę bajtów danych. Jeśli dane znaków są reprezentowane przez znaki ogólnokształtne w Unicode, to dodatnia wartość parametru cbUserData oznacza liczbę znaków pomnożoną przez rozmiar w bajtach każdego znaku.

pUserDataTerm
Jest sekwencją terminatorów, którą należy użyć dla tej kolumny. Ten parametr jest przydatny głównie dla typów danych znaków, ponieważ wszystkie inne typy mają stałą długość lub, w przypadku danych binarnych, wymagają wskaźnika długości, aby dokładnie zarejestrować liczbę obecnych bajtów.

Aby uniknąć zakończenia wyodrębnionych danych lub zaznaczyć, że dane w pliku użytkownika nie zostały zakończone, ustaw ten parametr na NULL.

Jeśli używa się więcej niż jednego sposobu określania długości kolumny pliku użytkownika (np. terminator i wskaźnik długości, lub terminator i maksymalna długość kolumny), kopia masowa wybiera taki, który skutkuje najmniejszą kopią danych.

API kopiowania masowego wykonuje konwersję znaków Unicode na MBCS w razie potrzeby. Należy zadbać o to, aby zarówno ciąg bajtów terminatora, jak i długość tego ciągu były prawidłowo ustawione.

cbUserDataTerm
To długość w bajtach sekwencji terminatorów, którą należy użyć dla tej kolumny. Jeśli w danych nie ma ani nie ma pożądanego terminatora, ustaw tę wartość na 0.

idxServerCol
Jest położeniem porządkowym kolumny w tabeli bazy danych. Numer pierwszej kolumny to 1. Pozycja porządkowa kolumny jest podawana przez SQLColumns.

Jeśli ta wartość wynosi 0, kopiowanie masowe ignoruje kolumnę w pliku danych.

Zwroty

POWODZENIE lub NIEPOWODZENIE.

Remarks

Funkcja bcp_colfmt pozwala określić format pliku użytkownika dla kopii masowych. Dla kopii masowej format zawiera następujące części:

  • Mapowanie z kolumn pliku użytkownika na kolumny bazy danych.

  • Typ danych każdej kolumny pliku użytkownika.

  • Długość opcjonalnego wskaźnika dla każdej kolumny.

  • Maksymalna długość danych na kolumnę pliku użytkownika.

  • Opcjonalna sekwencja bajtów kończących dla każdej kolumny.

  • Długość opcjonalnej sekwencji bajtów kończących.

Każde wywołanie bcp_colfmt określa format jednej kolumny pliku użytkownika. Na przykład, aby zmienić domyślne ustawienia dla trzech kolumn w pięciokolumnowym pliku danych użytkownika, najpierw wywołaj bcp_columns(5), a następnie bcp_colfmt pięć razy, z czego trzy z tych wywołań ustawiają niestandardowy format. Dla pozostałych dwóch wywołań ustaw eUserDataType na 0, a cbIndicator, cbUserData i cbUserDataTerm odpowiednio na 0, SQL_VARLEN_DATA i 0. Ta procedura kopiuje wszystkie pięć kolumn, trzy z dostosowanym formatem i dwie z domyślnym formatem.

Dla cbIndicator, wartość 8 wskazująca duży typ wartości jest teraz prawidłowa. Jeśli prefiks jest określony dla pola, którego odpowiadająca kolumna jest nowym maksymalnym typem, można go ustawić tylko na 8. Szczegóły można znaleźć w bcp_bind.

Funkcja bcp_columns musi być wywołana przed jakimikolwiek wywołaniami bcp_colfmt.

Musisz wywołać bcp_colfmt raz dla każdej kolumny w pliku użytkownika.

Wywołanie bcp_colfmt więcej niż raz dla dowolnej kolumny pliku użytkownika powoduje błąd.

Nie musisz kopiować wszystkich danych w pliku użytkownika do tabeli SQL Server. Aby pominąć kolumnę, określ format danych dla tej kolumny, ustawiając parametr idxServerCol na 0. Jeśli chcesz pominąć kolumnę, musisz określić jej typ.

Funkcja bcp_writefmt może być użyta do utrzymywania specyfikacji formatu.

bcp_colfmt Wsparcie dla ulepszonych funkcji daty i godziny

Aby uzyskać informacje o typach używanych z parametrem eUserDataType dla typów dat/godzin, zobacz Bulk Copy Changes for Enhanced Date and Time Types (OLE DB i ODBC).

Aby uzyskać więcej informacji, zobacz ulepszenia daty i godziny (ODBC).