最近有人问我这个问题,我想我会在Stack Overflow上发布它以获得一些输入。为什么从int转换/转换返回星号
现在显然以下两种情况都应该失败。
#1:
DECLARE @x BIGINT
SET @x = 100
SELECT CAST(@x AS VARCHAR(2))
明显的错误:
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))
并不明显,它返回一个*(人们会想到这是一个算术溢出以及???)
现在我真正的问题是,为什么?这是仅仅是设计还是有历史或其他什么 背后呢?
我看了几个网站,不能得到满意的答案。
http://msdn.microsoft.com/en-us/library/aa226054(v=sql.80).aspx
请注意我知道/了解,当一个整数太大而被转换成特定大小的字符串,这将是“转化”成星号,这是明显的答案,我希望我可以对所有不断给出这个答案的人下决心。 我想知道为什么使用星号而不是抛出异常,例如历史原因等?
查找星号的十进制ASCII码以解决“谜题”。 – dasblinkenlight 2012-02-03 05:24:16
哈哈,42?宇宙和其他一切生命的答案? hehehe – Helix 2012-02-03 05:48:46
@dasblinkenlight - 这解释了为什么'select *'返回**所有** :)。 – 2012-02-03 06:41:26