Zine.net online

Witaj na Zine.net online Zaloguj się | Rejestracja | Pomoc
w Szukaj

dev2dev

Dziennik pokładowy MSSQL 2008 (wpis 0x0012) - Problem jawnej konwersji

Ostatnio na forum wss.pl było sporo wątków na temat niejawnych konwersji dokonywanych przez SQL Server i zagrożeniach z tego płynących. Problemów związanych z niejawną konwersją dotyczyło również moje zgłoszenie na microsoft.connect.com dotyczące wyrażeń zawierających wartości typu datetime i datetime2. Ale robiąc wpis na moim blogu dotyczącym przeniesienia danych tabelarycznych ze strony HTML do tabeli SQL Server natknąłem się na problem jawnej konwersji (kolumna z poprzednim miejsce w rankingu była liczbą ujętą w nawiasy lub skrótem 'N.Rkd' gdy drużyna nie była dotąd notowana).
Na początek zasadnicze pytanie: co to jest?

(1)

Czy to jest wyrażenie numeryczne? Tak mi się wydawało.

Ale:

select CAST('(1)' as numeric)

zwraca zaskakujący wynik:

Msg 8114, Level 16, State 5, Line 1
Error converting data type varchar to numeric.

W takim razie spróbujmy zastosować funkcję ISNUMERIC do określenia czy według SQL Server jest to wyrażenie numeryczne. W BOL dla tej funkcji jest wyraźnie napisane:

Determines whether an expression is a valid numeric type

Kiedyś przeanalizowałem cały zestaw znaków szukając tych dla których funkcja ta zwróci wartość 1. Więc wiem, że niekoniecznie musi być to liczba. Ale:

select ISNUMERIC('(1)')

zwraca zero. Czyli po prostu to nie jest wyrażenie numeryczne według SQL Server. Dziwne.



Opublikowane 8 grudnia 2009 09:57 przez marekpow
Filed under: , , , ,

Komentarze:

Brak komentarzy
Komentarze anonimowe wyłączone
W oparciu o Community Server (Personal Edition), Telligent Systems