Ktoś niedawno zadał mi to pytanie i pomyślałem, że opublikuję go w Stack Overflow, aby uzyskać trochę informacji.Dlaczego przesyłanie/konwersja z int zwraca gwiazdkę
Oczywiście oba poniższe scenariusze zawodzą.
# 1:
DECLARE @x BIGINT
SET @x = 100
SELECT CAST(@x AS VARCHAR(2))
błąd oczywisty:
Msg 8115, Level 16, State 2, Line 3
Arithmetic overflow error converting expression to data type varchar.
# 2:
DECLARE @x INT
SET @x = 100
SELECT CAST(@x AS VARCHAR(2))
nie jest oczywiste, zwraca * (Można by oczekiwać, że jest to arytmetyczna przepełnienie również?)
Teraz moje prawdziwe pytanie brzmi: dlaczego? Czy to tylko z założenia, czy jest za tym coś złego?
Sprawdziłem kilka witryn i nie mogłem uzyskać satysfakcjonującej odpowiedzi.
http://msdn.microsoft.com/en-us/library/aa226054(v=sql.80).aspx
Uwaga wiem/zrozumieć, że gdy liczba całkowita jest zbyt duża, aby być konwertowane do określonej wielkości napisu, że będzie to „przerobiona” na gwiazdkę, jest to oczywista odpowiedź i Żałuję, że nie mogę zgodzić się z każdym, kto ciągle daje tę odpowiedź. Chcę wiedzieć, dlaczego użyto gwiazdki, a nie wyjątku, np. historyczne powody itp.?
wyszukać dziesiętny kod ASCII gwiazdki, aby rozwiązać "tajemnicę". – dasblinkenlight
LOL, 42? Odpowiedź na życie wszechświata i wszystko inne? hehehe – Helix
@ dasblinkenlight - To wyjaśnia, dlaczego 'select *' zwraca ** wszystko ** :). –