Ulepszone zachowanie typu Data i godzina z poprzednich SQL Server wersji (ODBC)
W tym temacie opisano oczekiwane zachowanie, gdy aplikacja klient korzystającego z enhanced Data i czas funkcje komunikuje się z wersją SQL Server starsze niż SQL Server 2008i gdy aplikacja klient za pomocą składników Microsoft Data Access Components, Windows Data Access Components lub wersja SQL Server Native klient starsze niż SQL Server 2008 wysyła polecenia do serwera obsługującego enhanced Data i czas funkcje.
Zachowanie klienta niższego poziomu
Aplikacje klienckie, które zostały skompilowane przy użyciu wersja SQL Server Native Client przed SQL Server 2008 Zobacz nową datę /czas typy kolumn nvarchar.Zawartość kolumna są literału oświadczenia, zgodnie z opisem w "formaty danych: Ciągi i literałów" sekcja Obsługa typu danych ODBC Data/Godzina ulepszenia. Rozmiar kolumna jest maksymalna długość literału precision ułamków sekund określone dla kolumna.
Wykaz interfejsów API zwróci metadane zgodne z niedziałający-poziomu danych wpisz kod zwracane do klient (na przykład nvarchar) i skojarzonym niedziałający-poziom reprezentacji (na przykład właściwe literału format).Jednak nazwa typu danych zwróconych będzie rzeczywistym SQL Server 2008 nazwy typu.
Metadane instrukcji zwrócony przez SQLDescribeCol, SQLDescribeParam, SQGetDescField, i SQLColAttribute zwróci metadanych, który jest zgodny z niedziałający-poziom typu pod każdym względem, włączając nazwę typu.Przykładem takiego niedziałający-typ poziom jest nvarchar.
Gdy aplikacja klient niższego poziomu uruchamia przeciwko SQL Server 2008 (lub nowsze) serwera na zmiany schematu, które do daty /czas typy zostały dokonane, oczekiwane zachowanie jest następująca:
Typ programu SQL Server 2005 |
SQL Server 2008 (lub nowszego) typu |
Typ klient ODBC |
Wynik konwersji (SQL c) |
Parametr konwersji (C-SQL) |
---|---|---|---|---|
Datetime |
Data |
SQL_C_TYPE_DATE |
OK |
OK (1) |
SQL_C_TYPE_TIMESTAMP |
Czas pól zestaw do zera. |
OK (2) Kończy się niepowodzeniem, jeśli pole czas jest niezerowa.Współpracuje z SQL Server 2005. |
||
Time(0) |
SQL_C_TYPE_TIME |
OK |
OK (1) |
|
SQL_C_TYPE_TIMESTAMP |
Pola Data zestaw do bieżącej data. |
OK (2) Data jest ignorowane.Kończy się niepowodzeniem, jeśli ułamków sekund są zera.Współpracuje z SQL Server 2005. |
||
Time(7) |
SQL_C_TIME |
Błąd — nieprawidłowa czas literału. |
OK (1) |
|
SQL_C_TYPE_TIMESTAMP |
Błąd — nieprawidłowa czas literału. |
OK (1) |
||
Datetime2(3) |
SQL_C_TYPE_TIMESTAMP |
OK |
OK (1) |
|
Datetime2(7) |
SQL_C_TYPE_TIMESTAMP |
OK |
Wartość zostanie zaokrąglona do drugiego 1 i 300th przez klient konwersji. |
|
Smalldatetime |
Data |
SQL_C_TYPE_DATE |
OK |
OK |
SQL_C_TYPE_TIMESTAMP |
Czas pól zestaw do zera. |
OK (2) Kończy się niepowodzeniem, jeśli pole czas jest niezerowa.Współpracuje z SQL Server 2005. |
||
Time(0) |
SQL_C_TYPE_TIME |
OK |
OK |
|
SQL_C_TYPE_TIMESTAMP |
Pola Data zestaw do bieżącej data. |
OK (2) Data jest ignorowane.Kończy się niepowodzeniem, jeśli ułamków sekund zera. Współpracuje z SQL Server 2005. |
||
Datetime2(0) |
SQL_C_TYPE_TIMESTAMP |
OK |
OK |
Klucz do symboli
Symbol |
Znaczenie |
---|---|
1 |
Jeśli go pracował z SQL Server 2005 należy kontynuować pracę z nowszą wersja z SQL Server. |
2 |
Aplikacja pracował z SQL Server 2005 może nie działać z nowszą wersja z SQL Server. |
Należy zauważyć, że jedynie wspólne zmiany schematu zostały uwzględnione.Typowe zmiany są następujące:
Przy użyciu nowego typu, gdzie logicznie aplikacja wymaga tylko data lub czas wartości.Jednak aplikacja została zmuszona do korzystania z dataczas lub smalldateczas ze względu na brak oddzielnej Data i czas typów.
Uzyskanie dodatkowych ułamków sekund precyzji lub dokładności przy użyciu nowego typu.
Przełączanie do datetime2, ponieważ jest preferowaną data i czas datatype.
Metadane kolumn zwracanych przez SQLColumns, SQLProcedureColumns i SQLSpecialColumns
Zwracane są następujące wartości w kolumnie Data /czas typów:
Typ kolumny |
data |
godzina |
smalldatetime |
data_i_godzina |
datetime2 |
datetimeoffset |
---|---|---|---|---|---|---|
DATA_TYPE |
SQL_WVARCHAR |
SQL_WVARCHAR |
SQL_TYPE_TIMESTAMP |
SQL_TYPE_TIMESTAMP |
SQL_WVARCHAR |
SQL_WVARCHAR |
TYPE_NAME |
data |
godzina |
smalldatetime |
data_i_godzina |
datetime2 |
datetimeoffset |
COLUMN_SIZE |
10 |
8,10..16 |
16 |
23 |
19, 21..27 |
26, 28..34 |
BUFFER_LENGTH |
20 |
16, 20..32 |
16 |
16 |
38, 42..54 |
52, 56..68 |
DECIMAL_DIGITS |
NULL |
NULL |
0 |
3 |
NULL |
NULL |
SQL_DATA_TYPE |
SQL_WVARCHAR |
SQL_WVARCHAR |
SQL_DATETIME |
SQL_DATETIME |
SQL_WVARCHAR |
SQL_WVARCHAR |
SQL_DATETIME_SUB |
NULL |
NULL |
SQL_CODE_TIMESTAMP |
SQL_CODE_TIMESTAMP |
NULL |
NULL |
CHAR_OCTET_LENGTH |
NULL |
NULL |
NULL |
NULL |
NULL |
NULL |
SS_DATA_TYPE |
0 |
0 |
111 |
111 |
0 |
0 |
SQLSpecialColumns zwraca SQL_DATA_TYPE, SQL_DATETIME_SUB, CHAR_OCTET_LENGTH lub SS_DATA_TYPE.
Metadane typ danych zwróconej przez SQLGetTypeInfo
Zwracane są następujące wartości w kolumnie Data /czas typów:
Typ kolumny |
data |
godzina |
smalldatetime |
data_i_godzina |
datetime2 |
datetimeoffset |
---|---|---|---|---|---|---|
TYPE_NAME |
data |
godzina |
smalldatetime |
data_i_godzina |
datetime2 |
datetimeoffset |
DATA_TYPE |
SQL_WVARCHAR |
SQL_WVARCHAR |
SQL_TYPE_TIMESTAMP |
SQL_TYPE_TIMESTAMP |
SQL_WVARCHAR |
SQL_WVARCHAR |
COLUMN_SIZE |
10 |
16 |
16 |
23 |
27 |
34 |
LITERAL_PREFIX |
‘ |
‘ |
‘ |
‘ |
‘ |
‘ |
LITERAL_SUFFIX |
‘ |
‘ |
‘ |
‘ |
‘ |
‘ |
CREATE_PARAMS |
NULL |
NULL |
NULL |
NULL |
NULL |
NULL |
NULLABLE |
SQL_NULLABLE |
SQL_NULLABLE |
SQL_NULLABLE |
SQL_NULLABLE |
SQL_NULLABLE |
SQL_NULLABLE |
CASE_SENSITIVE |
SQL_FALSE |
SQL_FALSE |
SQL_FALSE |
SQL_FALSE |
SQL_FALSE |
SQL_FALSE |
PRZESZUKIWANIE |
SQL_PRED_SEARCHABLE |
SQL_PRED_SEARCHABLE |
SQL_PRED_SEARCHABLE |
SQL_PRED_SEARCHABLE |
SQL_PRED_SEARCHABLE |
SQL_PRED_SEARCHABLE |
UNSIGNED_ATTRIBUTE |
NULL |
NULL |
NULL |
NULL |
NULL |
NULL |
FXED_PREC_SCALE |
SQL_FALSE |
SQL_FALSE |
SQL_FALSE |
SQL_FALSE |
SQL_FALSE |
SQL_FALSE |
AUTO_UNIQUE_VALUE |
NULL |
NULL |
NULL |
NULL |
NULL |
NULL |
LOCAL_TYPE_NAME |
data |
godzina |
smalldatetime |
data_i_godzina |
datetime2 |
datetimeoffset |
MINIMUM_SCALE |
NULL |
NULL |
0 |
3 |
NULL |
NULL |
MAXIMUM_SCALE |
NULL |
NULL |
0 |
3 |
NULL |
NULL |
SQL_DATA_TYPE |
SQL_WVARCHAR |
SQL_WVARCHAR |
SQL_DATETIME |
SQL_DATETIME |
SQL_WVARCHAR |
SQL_WVARCHAR |
SQL_DATETIME_SUB |
NULL |
NULL |
SQL_CODE_TIMESTAMP |
SQL_CODE_TIMESTAMP |
NULL |
NULL |
NUM_PREC_RADIX |
NULL |
NULL |
NULL |
NULL |
NULL |
NULL |
INTERVAL_PRECISION |
NULL |
NULL |
NULL |
NULL |
NULL |
NULL |
USERTYPE |
0 |
0 |
12 |
22 |
0 |
0 |
Zachowanie serwerowe niskiego poziomu
Podczas połączenia z wystąpienie serwera wcześniejszej wersja, SQL Server 2008, wszystkie próby użycia nowych typów serwera lub kody metadane skojarzonych i pola deskryptora spowoduje zwracanych wartość SQL_ERROR. Diagnostyczne rekord zostanie wygenerowany z SQLSTATE HY004 i komunikat "SQL nieprawidłowy typ danych dla wersja serwera połączenia" lub z 07006 i "Naruszenie atrybut typu danych z ograniczeniami".