поймать исключение для аргумента log(), которое может быть NaN или нулевым или отрицательным в SQl server 2008 R2

#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