Vedi IsNumeric() rotto? Solo fino a un certo punto.
SELECT CAST('.' AS MONEY)
restituisce 0.00
(anche se il cast non riesce per int
e float
)
ISNUMERIC
controlla solo che il valore possa essere convertito in uno qualsiasi dei tipi di dati numerici che è generalmente inutile. Di solito vuoi sapere se può essere trasmesso a un tipo specifico.
Inoltre non sembra nemmeno eseguire correttamente quell'attività per tutti i possibili input.. ISNUMERIC(' ')
restituisce 0
nonostante il casting sia riuscito a int e money. Viceversa ISNUMERIC(N'8')
restituisce 1
ma non esegue correttamente il cast su nulla che ho provato.
Alcune utili funzioni di supporto sono qui IsNumeric, IsInt, IsNumber.
SQL Server 2012 ha introdotto TRY_PARSE
e TRY_CONVERT
che aiutano molto in questo.