Alguien me hizo esta pregunta recientemente y pensé que la publicaría en Stack Overflow para obtener alguna entrada.Por qué lanzar/convertir de int devuelve un asterisco
Ahora, obviamente, se supone que ambos de los siguientes escenarios fallan.
# 1:
DECLARE @x BIGINT
SET @x = 100
SELECT CAST(@x AS VARCHAR(2))
error evidente:
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))
No es obvio, se devuelve un * (Uno esperaría que esto sea una aritmética desbordamiento también??)
Ahora mi verdadera pregunta es, ¿por qué ??? ¿Es esto simplemente por diseño o hay historia o algo sin sentido detrás de esto?
Miré algunos sitios y no pude obtener una respuesta satisfactoria.
http://msdn.microsoft.com/en-us/library/aa226054(v=sql.80).aspx
Tenga en cuenta que sé/entienden que cuando un entero es demasiado grande para ser convertido a una cadena de tamaño específico que va a ser "convertido" a un asterisco, esta es la respuesta obvia y Desearía poder rechazar a todos los que siguen dando esta respuesta. Quiero saber por qué se usa un asterisco y no una excepción, p. Ej. razones históricas, etc?
busca el código ASCII decimal de un asterisco para resolver el "misterio". – dasblinkenlight
LOL, 42? La respuesta a la vida del universo y todo lo demás? hehehe – Helix
@dasblinkenlight - Eso explica por qué 'select *' devuelve ** todo ** :). –