Non c'è boolean
in SQL Server. Questo significa che non puoi dire semplicemente IF (expression)
; devi confrontarlo con qualcosa, perché restituisce true
o false
nello stesso senso in cui probabilmente sei abituato in altre lingue.
solo una preferenza, ma io preferirei di scrivere in questo modo:
IF ISNUMERIC('5675754674') = 1
BEGIN
...
END
Non c'è modo in SQL Server per evitare il confronto a 1, come nel tuo secondo esempio.
anche come un a parte si deve essere consapevoli dei punti deboli del ISNUMERIC()
- può dare falsi positivi per i valori "numerici", come .
, CHAR(9)
, e
, $
e una miriade di altre stringhe non numerici. Se volete sapere se qualcosa è un numero intero, per esempio, per meglio dire:
IF '5675754674' NOT LIKE '%[^0-9]%'
BEGIN
...
END
Ma anche questo non è un test completo e valido perché restituirà true per i valori > (2^32)-1
e tornerà false per negativi valori.
altro aspetto negativo di ISNUMERIC()
è che restituisca true se il valore può essere convertito in qualsiasi dei tipi numerici, che non è la stessa di tutti tipi numerici. Spesso le persone eseguono il test per ISNUMERIC()
e quindi provano a trasmettere uno FLOAT
a SMALLINT
e la conversione non riesce.
In SQL Server 2012 si avrà un nuovo metodo chiamato TRY_CONVERT()
che restituisce NULL
se la conversione al tipo di dati specificato non è valida.
fonte
2012-02-15 00:14:40