Udostępnij za pośrednictwem


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.

Zobacz także

Koncepcje