SSMS
 sql >> Database >  >> Database Tools >> SSMS

SQL Server ISNUMERIC() Chiarimento

Dovresti usare CAST() o TRY_CAST() invece:

declare @test nvarchar(8) = '12345678'
select cast(@test as bigint) -- errors on failure
select try_cast(@test as bigint) -- returns null on failure

Inoltre, è importante sottolineare il ISNUMERIC() non è perfetto. Dai documenti :

ISNUMERIC restituisce 1 per alcuni caratteri che non sono numeri, come più (+), meno (-) e simboli di valuta validi come il simbolo del dollaro ($). Per un elenco completo dei simboli di valuta, vedere money e smallmoney (Transact-SQL).

Per questo motivo non credo che il controllo logico abbia valore qui. Meglio usare TRY_CAST() su tutti i valori, indipendentemente dalla presenza di caratteri e gestire la risposta nulla in modo prevedibile.