#sql #sql-server #sql-server-2008 #exception #windows-7
#sql #sql-сервер #sql-server-2008 #исключение #windows-7
Вопрос:
В SQl server 2008 R2 мне нужно поймать исключение для аргумента log(), которое может быть NaN или нулевым или отрицательным.
BEGIN TRY
DECLARE @ab float
select @ab = log(c.ab) FROM t1 a inner join t2 c
on t1.id = t2.id
-- @ab is selected from a table, but I do not know how to
-- write the query for this case combined with capturing a possible exception.
END TRY
BEGIN CATCH
EXEC sys.sp_addmessage 60000, 16, 'log argument not positive'
RAISERROR (60000, 16, 1)
END CATCH
К моему удивлению, log(null) не выдал исключение!!!
Я могу использовать «if», чтобы вызвать исключение здесь.
Но @ab будет выбрано из таблицы, поэтому оно выбрано из столбца. Как перехватить исключение, когда @ab выбирается из таблицы?
Спасибо
Комментарии:
1. Если @ab выбрано из таблицы, то оно либо будет иметь значение, либо будет равно null. Что вы делаете в
log
функции. опубликуйте этот код.
Ответ №1:
Это небольшое изменение по сравнению с ответом в вашем последнем сообщении:
DECLARE @result INT
DECLARE @insidelog INT
SELECT @insidelog = field FROM tablename WHERE condition = 'met'
IF @insidelog < 0 OR @insidelog IS NULL
BEGIN
EXEC sys.sp_addmessage 60000, 16, 'log() argument is not positive'
RAISERROR (60000, 16, 1)
END
ELSE
BEGIN
SET @result = LOG(@insidelog)
END