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.