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

SQL Server ISNUMERIC() Klarstellung

Sie sollten CAST() verwenden oder TRY_CAST() stattdessen:

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

Außerdem ist es wichtig, auf ISNUMERIC() hinzuweisen ist nicht perfekt. Aus den Dokumenten :

ISNUMERIC gibt 1 für einige Zeichen zurück, die keine Zahlen sind, z. B. Plus (+), Minus (-) und gültige Währungssymbole, z. B. das Dollarzeichen ($). Eine vollständige Liste der Währungssymbole finden Sie unter money and smallmoney (Transact-SQL).

Aus diesem Grund halte ich die logische Prüfung hier nicht für sinnvoll. Verwenden Sie am besten TRY_CAST() für alle Werte, unabhängig vom Vorhandensein von Zeichen, und handhabt die Null-Antwort auf vorhersehbare Weise.