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

SQL Server ISNUMERIC() Verduidelijking

Gebruik CAST() of TRY_CAST() in plaats daarvan:

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

Het is ook belangrijk om te wijzen op de ISNUMERIC() is niet perfect. Van de docs :

ISNUMERIC retourneert 1 voor sommige tekens die geen cijfers zijn, zoals plus (+), min (-), en geldige valutasymbolen zoals het dollarteken ($). Voor een volledige lijst met valutasymbolen, zie geld en kleingeld (Transact-SQL).

Om deze reden denk ik dat de logische controle hier niet van waarde is. Gebruik het beste TRY_CAST() op alle waarden, ongeacht de aanwezigheid van tekens en behandel de nulreactie op een voorspelbare manier.



  1. Querystatistieken nemen 99% van de querytijd in beslag

  2. Deze tabel bevat geen unieke kolom. De functies Rasterbewerking, selectievakje, Bewerken, Kopiëren en Verwijderen zijn niet beschikbaar

  3. Doe mee aan samengevoegde zoekopdrachten

  4. Is er een manier om de kolomlijst in een SELECT * van #Temp_Table in SSMS uit te breiden?