В SQL Server нет boolean
. Это означает, что вы не можете просто сказать IF (expression)
; вы должны сравнить это с чем-то, потому что оно возвращает true
или false
в том же смысле, в каком вы, вероятно, привыкли к другим языкам.
Просто предпочтение, но я бы предпочел написать это так:
IF ISNUMERIC('5675754674') = 1
BEGIN
...
END
В SQL Server нет способа избежать сравнения с 1, как во втором примере.
Кроме того, вы должны знать о слабых сторонах ISNUMERIC()
- он может давать ложные срабатывания для «числовых» значений, таких как .
, CHAR(9)
, e
, $
и множество другие нечисловые строки. Если вы хотите узнать, является ли что-то целым, например, лучше сказать:
IF '5675754674' NOT LIKE '%[^0-9]%'
BEGIN
...
END
Но даже это не полный и действительный тест, потому что он вернет true для значений > (2^32)-1
и вернет false для отрицательных значений.
Еще одним недостатком ISNUMERIC()
является то, что он вернет true, если значение можно преобразовать в любой числовых типов, что не совпадает с всеми числовыми типами. Часто люди проверяют на ISNUMERIC()
, а затем пытаются преобразовать FLOAT
в SMALLINT
, и преобразование не удается.
В SQL Server 2012 у вас будет новый метод с именем TRY_CONVERT()
, который возвращает NULL
, если преобразование в указанный тип данных недопустимо.