Кто-то недавно задал мне этот вопрос, и я подумал, что отправлю его в Stack Overflow, чтобы получить некоторые данные.
Теперь очевидно, что оба следующих сценария должны потерпеть неудачу.
# 1:
DECLARE @x BIGINT
SET @x = 100
SELECT CAST(@x AS VARCHAR(2))
Очевидная ошибка:
Msg 8115, уровень 16, состояние 2, строка 3
Ошибка арифметического переполнения, преобразующая выражение в тип данных varchar.
# 2:
DECLARE @x INT
SET @x = 100
SELECT CAST(@x AS VARCHAR(2))
Не очевидно, он возвращает a * (Можно было бы ожидать, что это тоже будет арифметическое переполнение???)
Теперь мой реальный вопрос: почему??? Это просто по дизайну или есть история или что-то зловещий за этим?
Я просмотрел несколько сайтов и не смог получить удовлетворительный ответ.
http://msdn.microsoft.com/en-us/library/aa226054(v=sql.80).aspx
Обратите внимание: я знаю/понимаю, что, когда целое число слишком велико, чтобы преобразовать его в строку определенного размера, которая будет "преобразована" в звездочку, это очевидный ответ, и я бы хотел, чтобы я мог сжать всех который продолжает давать этот ответ. Я хочу знать, почему используется звездочка, а не исключение, например. исторические причины и т.д.