Кто-то недавно задал мне этот вопрос, и я решил опубликовать его в Переполнении стека, чтобы получить какой-либо ввод.
Теперь очевидно, что оба следующих сценария должны завершиться неудачей.
#1:
DECLARE @x BIGINT
SET @x = 100
SELECT CAST(@x AS VARCHAR(2))
Очевидная ошибка:
Сообщение 8115, уровень 16, состояние 2, строка 3
Ошибка арифметического переполнения при преобразовании выражения в тип данных varchar.
# 2:
DECLARE @x INT
SET @x = 100
SELECT CAST(@x AS VARCHAR(2))
Не очевидно, что он возвращает * (можно было бы ожидать, что это также будет арифметическое переполнение ???)
Теперь мой реальный вопрос, почему ???Это просто умышленно или за этим стоит история или что-то зловещее?
Я просмотрел несколько сайтов и не смог получить удовлетворительный ответ.
Например http://beyondrelational.com/quiz/sqlserver/tsql/2011/questions/Why-does-CAST-function-return-an-asterik--star.aspx
http://msdn.microsoft.com/en-us/library/aa226054(v=sql.80).aspx
Обратите внимание, что я знаю / понимаю, что когда целое число слишком велико для преобразования в строку определенного размера, оно будет «преобразовано» в звездочку, это очевидноеответ, и я хотел бы, чтобы я мог понизить голос каждого, кто продолжает давать этот ответ.Я хочу знать, почему используется звездочка, а не выбрасывается исключение, например, по историческим причинам и т. Д. *