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.