Nowa data / czas funkcje z poprzednich wersji programu SQL Server (OLE DB)
W tym temacie opisano oczekiwane zachowanie, gdy aplikacja klient, która używa rozszerzonego data i czas funkcji komunikuje się za pomocą wersja programu SQL Server starsze niż SQL Server 2008i gdy skompilowany z wersją klient SQL Server Macierzysta klient starsze niż SQL Server 2008 wysyła polecenia do serwera, który obsługuje rozszerzone data i czas funkcji.
Zachowanie klient poziom niedziałający
Aplikacje klienckie, które używają wersja programu SQL Server Macierzysta klient starsze niż SQL Server 2008 Zobacz typy nowe data i godziny jako nvarchar kolumny. Zawartość kolumna są liczbami w postaci literału.Aby uzyskać więcej informacji, zobacz temat "formatów danych: Ciągi i literały"sekcjiObsługa typu danych OLE DB Data/Godzina ulepszenia. Rozmiar kolumna jest maksymalna długość literału dokładność określona dla kolumna.
Katalog interfejsów API zwróci metadane zgodne z niedziałający-zwrócony do klient (na przykład, kod typu danych poziomu nvarchar) i skojarzonym niedziałający-poziom reprezentację (na przykład odpowiedni literału format). Jednak nazwa typu danych zwróconych będzie rzeczywistych SQL Server 2008 Nazwa typu.
Gdy aplikacja klient niższego poziom jest uruchamiana przed SQL Server 2008 serwer, na których zmiany schematu na datę / czas typów zostaną wprowadzone, oczekiwane zachowanie jest następująca:
Typ klient OLE DB |
Typ programu SQL Server 2005 |
Typ programu SQL Server 2008 |
Wynik konwersji (serwera do klient) |
Parametr konwersji (klient do serwera) |
|---|---|---|---|---|
DBTYPE_DBDATE |
Data i godzina |
Data |
OK |
OK |
DBTYPE_DBTIMESTAMP |
Czas pól zestaw na zero. |
IRowsetChange zakończy się niepowodzeniem ze względu na ciąg obcinania wtedy, gdy pole czas jest różna od zera. |
||
DBTYPE_DBTIME |
czas(0) |
OK |
OK |
|
DBTYPE_DBTIMESTAMP |
Data pola zestaw do bieżącej data. |
IRowsetChange zakończy się niepowodzeniem ze względu na ciąg obcinania wtedy, gdy ułamków sekund są od zera. Data jest ignorowana. |
||
DBTYPE_DBTIME |
czas(7) |
Niepowodzenie — czas Nieprawidłowy literał. |
OK |
|
DBTYPE_DBTIMESTAMP |
Niepowodzenie — czas Nieprawidłowy literał. |
OK |
||
DBTYPE_DBTIMESTAMP |
Datetime2(3) |
OK |
OK |
|
DBTYPE_DBTIMESTAMP |
Datetime2(7) |
OK |
OK |
|
DBTYPE_DBDATE |
Smalldatetime |
Data |
OK |
OK |
DBTYPE_DBTIMESTAMP |
Czas pól zestaw na zero. |
IRowsetChange zakończy się niepowodzeniem ze względu na ciąg obcinania wtedy, gdy pole czas jest różna od zera. |
||
DBTYPE_DBTIME |
czas(0) |
OK |
OK |
|
DBTYPE_DBTIMESTAMP |
Data pola zestaw do bieżącej data. |
IRowsetChange zakończy się niepowodzeniem ze względu na ciąg obcinania wtedy, gdy ułamków sekund są od zera. Data jest ignorowana. |
||
DBTYPE_DBTIMESTAMP |
Datetime2(0) |
OK |
OK |
OK oznacza, że jego pracy z SQL Server 2005, należy kontynuować pracę z SQL Server 2008.
Tylko następujące wspólnego schematu zmiany zostały uwzględnione:
Za pomocą nowego typu, w której logicznie aplikacja wymaga tylko datę lub czas wartości.Jednak aplikacja jest zmuszona do korzystania z datetime lub smalldatetime ponieważ oddzielne data i czas typów nie były dostępne.
Uzyskanie dokładność ułamkowa kilka sekund lub dokładności przy użyciu nowego typu.
Przełączanie do datetime2 ponieważ jest to typ danych preferowanej data i godziny.
Aplikacje używające uzyskanej za pomocą metadane serwera ICommandWithParameters::GetParameterInfo lub rowzestaws schematu do zestaw informacji o typie parametru za pomocą ICommandWithParameters::SetParameterInfo zakończy się niepowodzeniem podczas konwersji klient, których reprezentację ciągu typ urządzenie źródłowe jest większy niż ciąg znaków reprezentujący typu obiekt docelowy. Na przykład jeśli używa klienta wiązania DBTYPE_DBTIMESTAMP i kolumna serwera to data SQL ServerKlient macierzystym przekonwertuje wartość "hh:mm:ss.fff mm-dd rrrr", ale metadane serwera będą zwracane jako nvarchar(10). Przepełnienie wynikowy powoduje, że DBSTATUS_E_CATCONVERTVALUE.Podobne problemy z konwersji danych przez IRowsetChange, ponieważ ustawiono metadane zestaw wierszy z metadane resultset.
Parametr i metadane zestawu zestaw wierszy
W tej sekcji opisano metadane dla parametrów, wynik kolumn i wierszy schematu dla klientów, którzy są kompilowane za pomocą wersja programu SQL Server Macierzysta klient starsze niż SQL Server 2008.
ICommandWithParameters::GetParameterInfo
Struktura DBPARAMINFO zwraca następujące informacje za pośrednictwem prgParamInfo parametr:
Typ parametru |
wType |
ulParamSize |
bPrecision |
bScale |
|---|---|---|---|---|
data |
DBTYPE_WSTR |
10 |
~0 |
~0 |
godzina |
DBTYPE_WSTR |
8, 10..16 |
~0 |
~0 |
Smalldatetime |
DBTYPE_DBTIMESTAMP |
16 |
16 |
0 |
data_i_godzina |
DBTYPE_DBTIMESTAMP |
16 |
23 |
3 |
datetime2 |
DBTYPE_WSTR |
19,21..27 |
~0 |
~0 |
datetimeoffset |
DBTYPE_WSTR |
26,28..34 |
~0 |
~0 |
Powiadomienie, że niektóre z nich zakresy wartości nie są stałe; na przykład 9 brakuje w 8 10..16.Jest to spowodowane dodanie przecinek dziesiętny podczas dokładność ułamkowa jest większa od zera.
IColumnsRowset::GetColumnsRowset
Zwracane są następujące kolumny:
Typ kolumna |
DBCOLUMN_TYPE |
DBCOLUMN_COLUMNSIZE |
DBCOLUMN_PRECISION |
DBCOLUMN_SCALE DBCOLUMN_DATETIMEPRECISION |
|---|---|---|---|---|
data |
DBTYPE_WSTR |
10 |
WARTOŚCI NULL |
WARTOŚCI NULL |
godzina |
DBTYPE_WSTR |
8, 10..16 |
WARTOŚCI NULL |
WARTOŚCI NULL |
Smalldatetime |
DBTYPE_DBTIMESTAMP |
16 |
16 |
0 |
data_i_godzina |
DBTYPE_DBTIMESTAMP |
16 |
23 |
3 |
datetime2 |
DBTYPE_WSTR |
19,21..27 |
WARTOŚCI NULL |
WARTOŚCI NULL |
datetimeoffset |
DBTYPE_WSTR |
26,28..34 |
WARTOŚCI NULL |
WARTOŚCI NULL |
ColumnsInfo::GetColumnInfo
Struktura DBCOLUMNINFO zwraca następujące informacje:
Typ parametru |
wType |
ulColumnSize |
bPrecision |
bScale |
|---|---|---|---|---|
data |
DBTYPE_WSTR |
10 |
~0 |
~0 |
czas(1..7) |
DBTYPE_WSTR |
8, 10..16 |
~0 |
~0 |
Smalldatetime |
DBTYPE_DBTIMESTAMP |
16 |
16 |
0 |
data_i_godzina |
DBTYPE_DBTIMESTAMP |
16 |
23 |
3 |
datetime2 |
DBTYPE_WSTR |
19,21..27 |
~0 |
~0 |
datetimeoffset |
DBTYPE_WSTR |
26,28..34 |
~0 |
~0 |
Schemat zestawów wierszy.
W tej sekcji omówiono metadane dla parametrów, wynik kolumn i wierszy schematu dla nowych typów danych.This information is useful is you have a client provider developed using tools earlier than SQL Server 2008 SQL Server Native Client.
Zestaw wierszy liczba.kolumn
Następujące wartości kolumn są zwracane dla daty / czas typów:
Typ kolumna |
DATA_TYPE |
CHARACTER_MAXIMUM_LENGTH |
CHARACTER_OCTET_LENGTH |
DATETIME_PRECISION |
|---|---|---|---|---|
data |
DBTYPE_WSTR |
10 |
20 |
WARTOŚCI NULL |
godzina |
DBTYPE_WSTR |
8, 10..16 |
16,20..32 |
WARTOŚCI NULL |
Smalldatetime |
DBTYPE_DBTIMESTAMP |
WARTOŚCI NULL |
WARTOŚCI NULL |
0 |
data_i_godzina |
DBTYPE_DBTIMESTAMP |
WARTOŚCI NULL |
WARTOŚCI NULL |
3 |
datetime2 |
DBTYPE_WSTR |
19,21..27 |
38,42..54 |
WARTOŚCI NULL |
datetimeoffset |
DBTYPE_WSTR |
26,28..34 |
52, 56..68 |
WARTOŚCI NULL |
Zestaw wierszy PROCEDURE_PARAMETERS
Następujące wartości kolumn są zwracane dla daty / czas typów:
Typ kolumna |
DATA_TYPE |
CHARACTER_MAXIMUM_LENGTH |
CHARACTER_OCTET_LENGTH |
TYPE_NAME LOCAL_TYPE_NAME |
|---|---|---|---|---|
data |
DBTYPE_WSTR |
10 |
20 |
data |
godzina |
DBTYPE_WSTR |
8, 10..16 |
16,20..32 |
godzina |
Smalldatetime |
DBTYPE_DBTIMESTAMP |
WARTOŚCI NULL |
WARTOŚCI NULL |
Smalldatetime |
data_i_godzina |
DBTYPE_DBTIMESTAMP |
WARTOŚCI NULL |
WARTOŚCI NULL |
data_i_godzina |
datetime2 |
DBTYPE_WSTR |
19,21..27 |
38,42..54 |
datetime2 |
datetimeoffset |
DBTYPE_WSTR |
26,28..34 |
52, 56..68 |
datetimeoffset |
Zestaw wierszy PROVIDER_TYPES
Dla typu Data/Godzina, zwracane są następujące wiersze:
Type-> Kolumna |
data |
godzina |
Smalldatetime |
data_i_godzina |
datetime2 |
datetimeoffset |
|---|---|---|---|---|---|---|
TYPE_NAME |
data |
godzina |
Smalldatetime |
data_i_godzina |
datetime2 |
datetimeoffset |
DATA_TYPE |
DBTYPE_WSTR |
DBTYPE_WSTR |
DBTYPE_DBTIMESTAMP |
DBTYPE_DBTIMESTAMP |
DBTYPE_WSTR |
DBTYPE_WSTR |
COLUMN_SIZE |
10 |
16 |
16 |
23 |
27 |
34 |
LITERAL_PREFIX |
‘ |
‘ |
‘ |
‘ |
‘ |
‘ |
LITERAL_SUFFIX |
‘ |
‘ |
‘ |
‘ |
‘ |
‘ |
CREATE_PARAMS |
WARTOŚCI NULL |
WARTOŚCI NULL |
WARTOŚCI NULL |
WARTOŚCI NULL |
WARTOŚCI NULL |
WARTOŚCI NULL |
Precyzja (całkowita liczba cyfr). |
VARIANT_TRUE |
VARIANT_TRUE |
VARIANT_TRUE |
VARIANT_TRUE |
VARIANT_TRUE |
VARIANT_TRUE |
CASE_SENSITIVE |
VARIANT_FALSE |
VARIANT_FALSE |
VARIANT_FALSE |
VARIANT_FALSE |
VARIANT_FALSE |
VARIANT_FALSE |
MOŻNA WYSZUKIWAĆ |
DB_SEARCHABLE |
DB_SEARCHABLE |
DB_SEARCHABLE |
DB_SEARCHABLE |
DB_SEARCHABLE |
DB_SEARCHABLE |
UNSIGNED_ATTRIBUTE |
WARTOŚCI NULL |
WARTOŚCI NULL |
WARTOŚCI NULL |
WARTOŚCI NULL |
WARTOŚCI NULL |
WARTOŚCI NULL |
FIXED_PREC_SCALE |
VARIANT_FALSE |
VARIANT_FALSE |
VARIANT_FALSE |
VARIANT_FALSE |
VARIANT_FALSE |
VARIANT_FALSE |
AUTO_UNIQUE_VALUE |
VARIANT_FALSE |
VARIANT_FALSE |
VARIANT_FALSE |
VARIANT_FALSE |
VARIANT_FALSE |
VARIANT_FALSE |
LOCAL_TYPE_NAME |
data |
godzina |
Smalldatetime |
data_i_godzina |
datetime2 |
datetimeoffset |
MINIMUM_SCALE |
WARTOŚCI NULL |
WARTOŚCI NULL |
WARTOŚCI NULL |
WARTOŚCI NULL |
WARTOŚCI NULL |
WARTOŚCI NULL |
MAXIMUM_SCALE |
WARTOŚCI NULL |
WARTOŚCI NULL |
WARTOŚCI NULL |
WARTOŚCI NULL |
WARTOŚCI NULL |
WARTOŚCI NULL |
IDENTYFIKATOR GUID |
WARTOŚCI NULL |
WARTOŚCI NULL |
WARTOŚCI NULL |
WARTOŚCI NULL |
WARTOŚCI NULL |
WARTOŚCI NULL |
BIBLIOTEKI TYPÓW |
WARTOŚCI NULL |
WARTOŚCI NULL |
WARTOŚCI NULL |
WARTOŚCI NULL |
WARTOŚCI NULL |
WARTOŚCI NULL |
WERSJA |
WARTOŚCI NULL |
WARTOŚCI NULL |
WARTOŚCI NULL |
WARTOŚCI NULL |
WARTOŚCI NULL |
WARTOŚCI NULL |
IS_LONG |
VARIANT_FALSE |
VARIANT_FALSE |
VARIANT_FALSE |
VARIANT_FALSE |
VARIANT_FALSE |
VARIANT_FALSE |
BEST_MATCH |
VARIANT_FALSE |
VARIANT_FALSE |
VARIANT_FALSE |
VARIANT_TRUE |
VARIANT_FALSE |
VARIANT_FALSE |
IS_FIXEDLENGTH |
VARIANT_FALSE |
VARIANT_FALSE |
VARIANT_FALSE |
VARIANT_FALSE |
VARIANT_FALSE |
VARIANT_FALSE |
Zachowanie serwera poziom niedziałający
Gdy połączenie z serwerem ze starszej wersja niż SQL Server 2008, dowolne próbować używać nowych nazw typ serwera (na przykład z ICommandWithParameters::SetParameterInfo lub ITableDefinition::CreateTable) spowoduje DB_E_BADTYPENAME.
Powiązane nowe typy parametrów lub wyniki bez użycia nazwy typu i albo nowego typu jest używana do określenia, typ serwera niejawnie lub jest prawidłową konwersja z typu serwera nie typu klient, zwracana jest DB_E_ERRORSOCCURRED i DBBINDSTATUS_UNSUPPORTED_CONVERSION jest ustawiony jako stan wiązanie dla akcesora, użyty na wykonać.
Jeśli konwersja klient obsługiwany typ buforu na typ serwera dla serwera w wersja dla połączenia, wszystkie typy buforu klienta mogą być używane.W tym kontekście Typ serwera oznacza, typem wskazanym za pomocą ICommandWithParameters::SetParameterInfo, lub implikowana przez typ buforu, jeśli ICommandWithParameters::SetParameterInfo nie została wywołana. Oznacza to, że DBTYPE_DBTIME2 i DBTYPE_DBTIMESTAMPOFFSET mogą być używane z niedziałający-poziom serwery, lub gdy DataTypeCompatibility = 80, jeśli klient konwersja na typ obsługiwanych serwerowych powiedzie się.Oczywiście typu serwera jest nieprawidłowa, błąd może nadal być zgłoszone przez serwer nie może go wykonać niejawna konwersja typu rzeczywistego serwera.
Zachowanie SSPROP_INIT_DATATYPECOMPATIBILITY
Kiedy SSPROP_INIT_DATATYPECOMPATIBILITY jest ustawiony na wartość SSPROPVAL_DATATYPECOMPATIBILITY_SQL2000, nową datę / czas typów i metadane skojarzone widoczny dla klientów pojawiających się w przypadku klientów niskiego poziom, jak opisano w Zbiorcza Kopiuj zmiany dla daty rozszerzony / czas typy (OLE DB i ODBC).
Porównywalności dla IRowsetFind
Wszystkie operatory porównania są dozwolone dla typów nowe daty/godziny, ponieważ są one wyświetlane jako ciąg typów zamiast typu Data/Godzina.