Natywne konwersje klientów SQL Server wykonywane z klienta na serwer

Dotyczy:sql ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse Analytics

Ten temat opisuje konwersje dat/godziny wykonywane pomiędzy aplikacją kliencką napisaną w bazie SQL Server Native Client OLE DB a SQL Server 2008 (10.0.x) (lub nowszy).

Conversions

Ten temat opisuje konwersje dokonane na kliencie. Jeśli klient określa precyzję ułamkowych sekund dla parametru różniącego się od tego zdefiniowanego na serwerze, konwersja klienta może spowodować awarię w przypadkach, gdy serwer pozwoli na powodzenie operacji. W szczególności klient traktuje każde obcięcie ułamków sekund jako błąd, podczas gdy SQL Server zaokrągla wartości czasowe do najbliższej całej sekundy.

Jeśli ICommandWithParameters::SetParameterInfo nie zostanie wywołany, DBTYPE_DBTIMESTAMP wiązania są konwertowane tak, jakby były datetime2.

Do->

Od
DBDATE (data) DBTIME (czas) DBTIME2 (czas) DBTIMESTAMP (smalldatetime) DBTIMESTAMP (datatime) DBTIMESTAMP (datetime2) DBTIMESTAMPOFFSET (datetimeoffset) STR WSTR SQLVARIANT

(sql_variant)
DATE 1,2 1,3,4 4,12 1,12 1,12 1,12 1,5, 12 1,12 1,12 1,12

datetime2(0)
DBDATE 1 - - 1,6 1,6 1,6 1,5, 6 1,10 1,10 1

date
DBTIME - 1 1 1,7 1,7 1,7 1,5, 7 1,10 1,10 1

Time(0)
DBTIME2 - 1,3 1 1,7,10,14 1,7,10,15 1,7,10 1,5,7,10 1,10,11 1,10,11 1

Czas (7)
DBTIMESTAMP 1,2 1,3,4 1,4,10 1,10,14 1,10,15 1,10 1,5,10 1,10,11 1,10,11 1,10

datetime2(7)
DBTIMESTAMPOFFSET 1,2,8 1,3,4,8 1,4,8,10 1,8,10,14 1,8,10,15 1,8,10 1,10 1,10,11 1,10,11 1,10

datetimeoffset(7)
FILETIME 1,2 1,3,4 1,4,13 1,13 1,13 1,13 1,5,13 1,13 1,10 1,13

datetime2(3)
BAJTÓW - - - - - - - N/A N/A N/A
VARIANT 1 1 1 1,10 1,10 1,10 1,10 N/A N/A 1,10
SSVARIANT 1,16 1,16 1,16 1,10,16 1,10,16 1,10,16 1,10,16 N/A N/A 1,16
BSTR 1,9 1,9 1,9,10 1,9,10 1,9,10 1,9,10 1,9,10 N/A N/A N/A
STR 1,9 1,9 1,9,10 1,9,10 1,9,10 1,9,10 1,9,10 N/A N/A N/A
WSTR 1,9 1,9 1,9,10 1,9,10 1,9,10 1,9,10 1,9,10 N/A N/A N/A

Klucz do symboli

Symbol Meaning
- Nie jest obsługiwana konwersja. Jeśli powiązanie zostanie zweryfikowane podczas wywołania IAccessor::CreateAccessor, DBBINDSTATUS_UPSUPPORTEDCONVERSION zwracane jest w rgStatus. Gdy walidacja akwaratorów jest odroczona, DBSTATUS_E_BADACCESSOR jest ustalana.
N/A Nie dotyczy.
1 Jeśli dostarczone dane nie są poprawne, DBSTATUS_E_CANTCONVERTVALUE jest ustalane. Dane wejściowe są weryfikowane przed zastosowaniem konwersji, więc nawet jeśli komponent zostanie zignorowany przez kolejną konwersję, musi być nadal ważny, aby konwersja zakończyła sukces.
2 Pola czasowe są ignorowane.
3 Ułamki sekund muszą być równe zeru, inaczej DBSTATUS_E_DATAOVERFLOW jest ustawione.
4 Komponent daty jest pomijany.
5 Strefa czasowa jest ustawiona na ustawienia strefy czasowej klienta.
6 Czas ustawiony jest na zero.
7 Data jest ustalana na aktualną.
8 Czas jest przeliczany na UTC. Jeśli podczas tej konwersji wystąpi błąd, DBSTATUS_E_CANTCONVERTVALUE jest ustalany.
9 Ciąg jest analizowany jako literal ISO i konwertowany na typ docelowy. Jeśli to się nie powiedzie, ciąg jest analizowany jako literal daty OLE (który również zawiera składowe czasowe) i konwertowany z daty OLE (DBTYPE_DATE) na typ docelowy.

Jeśli typ docelowy to DBTIMESTAMP, smalldatetime, datetime lub datetime2, ciąg musi być zgodny ze składnią dla literali date, time lub datetime2 , albo składnią rozpoznawaną przez OLE. Jeśli ciąg jest literalem daty, wszystkie składowe czasu są ustawione na zero. Jeśli ciąg jest literalnym czasem, data jest ustalana na bieżącą.

Dla wszystkich pozostałych typów docelowych ciąg musi odpowiadać składni literalnych tego typu docelowego.
10 Jeśli dojdzie do obcięcia ułamków sekund z utratą danych, DBSTATUS_E_DATAOVERFLOW jest ustalane. W przypadku konwersji ciągów znaków weryfikacja przebiegu jest możliwa tylko wtedy, gdy ciąg jest zgodny z składnią ISO. Jeśli ciąg jest literalem OLE daty, sekundy ułamkowe są zaokrąglane.

Przy konwersji z DBTIMESTAMP (datetime) na smalldatetime SQL Server Natywny Klient cicho obcina wartość sekund zamiast podnosić błąd DBSTATUS_E_DATAOVERFLOW.
11 Liczba ułamkowych drugich cyfr (skala) jest określana na podstawie rozmiaru kolumny docelowej, zgodnie z poniższą tabelą. W przypadku rozmiarów kolumn większych niż zakres w tabeli jest sugerowana skala 9. Ta konwersja powinna zezwalać na maksymalnie dziewięć cyfr sekund ułamkowych, maksymalnie dozwoloną przez bazę danych OLE DB.

Jednak jeśli typ źródła to DBTIMESTAMP, a ułamkowe sekundy to zero, nie generuje się ułamkowych cyfr sekund ani przecinka dziesiętnego. Takie zachowanie zapewnia kompatybilność wsteczną dla aplikacji rozwijanych przy użyciu starszych dostawców OLE DB.

Rozmiar kolumny ~0 oznacza nieograniczony rozmiar w OLE DB (9 cyfr, chyba że obowiązuje zasada 3-cyfrowa dla znacznika czasu bazy danych).
12 Semantyka konwersji sprzed SQL Server 2008 (10.0.x) dla DBTYPE_DATE jest utrzymywana. Ułamkowe sekundy są skracane do zera.
13 Semantyka konwersji sprzed SQL Server 2008 (10.0.x) dla DBTYPE_FILETIME jest utrzymywana. Jeśli używasz API Windows FileTimeToSystemTime, precyzja ułamków sekund jest ograniczona do 1 milisekundy.
14 Semantyka konwersji sprzed SQL Server 2008 (10.0.x) dla smalldatetime jest zachowana. Sekundy ustawione są na zero.
15 Semantyka konwersji sprzed SQL Server 2008 (10.0.x) dla czasu datowego jest zachowana. Sekundy są zaokrąglane do najbliższej 300. sekundy.
16 Zachowanie konwersji wartości (danego typu) osadzonej w strukturze klienta SSVARIANT jest takie samo jak zachowanie tej samej wartości i typu, gdy nie jest osadzona w strukturze klienta SSVARIANT.
Typ Długość (w characie) Skala
DBTIME2 8, 10..18 0,1..9
DBTIMESTAMP 19, 21..29 0,1..9
DBTIMESTAMPOFFSET 26, 28..36 0,1..9