Konwersje z SQL do c
W poniższej tabela wymieniono problemy, które należy rozważyć podczas konwersji z SQL Server Data /czas typy c typy.
Konwersje
SQL_C_DATE |
SQL_C_TIME |
SQL_C_TIMESTAMP |
SQL_C_BINARY |
SQL_C_CHAR |
SQL_C_WCHAR |
|
SQL_CHAR |
2,3,4,5 |
2,3,6,7,8 |
2,3,9,10,11 |
1 |
1 |
1 |
SQL_WCHAR |
2,3,4,5 |
2,3,6,7,8 |
2,3,9,10,11 |
1 |
1 |
1 |
SQL_TYPE_DATE |
OK |
12 |
13 |
14 |
16 |
16 |
SQL_SS_TIME2 |
12 |
8 |
15 |
17 |
16 |
16 |
SQL_TYPE_TIMESTAMP |
18 |
7,8 |
OK |
19 |
16 |
16 |
SQL_SS_TIMESTAMPOFFSET |
18,22 |
7,8,20 |
20 |
21 |
16 |
16 |
Klucz do symboli
Symbol |
Znaczenie |
---|---|
OK |
Nie problemy przy konwersji. |
1 |
Zasady przed SQL Server 2008 zastosowanie. |
2 |
Spacje początkowe i końcowe są ignorowane. |
3 |
Ciąg jest analizowany w datę, czas, czasstrefy, lub czaszoneoffset, i umożliwia ułamków sekund do 9 cyfr.Jeśli timezoneoffset jest analizowany, czas jest konwertowany na strefa czasowa klient.Jeżeli błąd wystąpi podczas tej konwersji, diagnostyczne rekord jest generowana z SQLSTATE 22018 i komunikat "Przepełnienie pole typu Data/Godzina". |
4 |
Jeśli wartość nie jest prawidłowa data, sygnaturę czasową lub wartość timestampoffset, diagnostyczne rekord jest generowana z SQLSTATE 22018 i komunikat "nieprawidłowy znak wartość dla specyfikacji". |
5 |
Jeśli czas jest niezerowa, diagnostyczne rekord jest generowana z SQLSTATE 01S07 i komunikat "Ułamkowa obcinania". |
6 |
Jeśli wartość nie jest prawidłowy czas, sygnatura czasowa lub wartość timestampoffset, diagnostyczne rekord jest generowana z SQLSTATE 22018 i komunikat "nieprawidłowy znak wartość dla specyfikacji". |
7 |
Składnik data jest ignorowana. |
8 |
Jeśli ułamków sekund są zera, diagnostyczne rekord jest generowany z SQLSTATE 01S07 i komunikat "Ułamkowa obcinania". |
9 |
Jeśli wartość nie jest prawidłowa data, czas, sygnatura czasowa lub wartość timestampoffset, diagnostyczne rekord jest generowana z SQLSTATE 22018 i komunikat "nieprawidłowy znak wartość dla specyfikacji". |
10 |
Jeśli wartością jest prawidłowy czas, składnik data jest zestaw do bieżącej data klient. |
11 |
Jeśli wartość jest prawidłowa data, czas jest zestaw do zera. |
12 |
Diagnostyczne rekord jest generowana z SQLSTATE 07006 i komunikat "ograniczonego typu danych atrybut". |
13 |
Czas jest zestaw do zera. |
14 |
Jeśli bufor nie jest wystarczająco duży, aby pomieścić SQL_DATE_STRUCT, diagnostyczne rekord zostanie wygenerowany z SQLSTATE 22003 i komunikat "Wartość numeryczna spoza zakres". |
15 |
Data jest zestaw do bieżącej daty klient. |
16 |
Jeśli bufor nie jest wystarczająco duży, aby pomieścić ciąg konwertowanych wartości, ale tylko ułamków sekund, obcięte i diagnostycznych rekord jest generowana z SQLSTATE 01004 i komunikat "ciąg danych, prawo obcięte".Jeśli bufor nie jest wystarczająco duży, aby pomieścić ciąg bez obcinania data, czas lub składniki przesunięcia, diagnostyczne rekord jest generowana z SQLSTATE 22003 i komunikat "Wartość numeryczna spoza zakres".Należy zauważyć, że data i timestampoffset SQLSTATE 01004 jest niemożliwe, ponieważ skrajny część ciąg przekonwertowanych nie zawiera ułamków sekund.Dlatego wszelkie obcinania powoduje utratę danych. |
17 |
Jeśli bufor nie jest wystarczająco duży, aby pomieścić SQL_SS_TIME2_STRUCT, diagnostyczne rekord zostanie wygenerowany z SQLSTATE 22003 i komunikat "Wartość numeryczna spoza zakres". |
18 |
Jeśli czas jest niezerowa, diagnostyczne rekord jest generowana z SQLSTATE 01S07 i komunikat "Ułamkowa obcinania". |
19 |
Jeśli typ serwera jest datetime lub smalldatetime, wartość jest zwracana w taki sam sposób jak w SQL Server 2000 i wcześniejszych wersjach.Odpowiada w formacie łańcuchowym TDS i będzie smalldatetime wartość 4-bajtowego i wartości 8-bajtowa datetime. Jeśli typ serwera jest datetime2, zwracana jest wartość jako SQL_TIMESTAMP_STRUCT.Jeśli bufor nie jest wystarczająco duży, aby pomieścić zwrócona wartość, diagnostyczne rekord jest generowana z SQLSTATE 22003 i komunikat "Wartość numeryczna spoza zakres". |
20 |
Czas jest konwertowany na strefa czasowa klient.Jeżeli błąd wystąpi podczas tej konwersji, diagnostyczne rekord jest generowana z SQLSTATE 22008 i komunikat "Przepełnienie pole typu Data/Godzina". |
21 |
Jeśli bufor jest wystarczająco duży, aby pomieścić SQL_SS_TIMESTAMPOFFSET_STRUCT, wartość jest zwracana jako SQL_SS_TIMESTAMPOFFSET_STRUCT.W przeciwnym razie diagnostyczne rekord jest generowana z SQLSTATE 22003 i komunikat "Wartość numeryczna spoza zakres". |
22 |
Wartość jest konwertowany na strefa czasowa klient przed ekstrahowane data.Zapewnia to spójność z innymi konwersje typów timestampoffset.Jeżeli błąd wystąpi podczas tej konwersji, diagnostyczne rekord jest generowana z SQLSTATE 22008 i komunikat "Przepełnienie pole typu Data/Godzina".Może to spowodować, że data, która różni się od wartości otrzymanej przez proste obcinania. |
W tabela, w tym temacie opisano konwersje między typu zwracane do klient i w powiązanie.Dla parametrów wyjściowych, jeśli typ serwera określonego w SQLBindParameter pasuje nie rzeczywisty typ na serwerze niejawna konwersja będzie wykonywane przez serwer i typ zwracany do klient będzie zgodny z typem określonym przez SQLBindParameter.Może to prowadzić do konwersji nieoczekiwane wyniki reguły konwersji serwera różnią się od tych wymienionych w powyższej tabela.Na przykład, kiedy domyślnej data należy dostarczyć, SQL Server używa 1900-1-1, zamiast bieżącej data.