T-SQL 2005 - ошибка деления на ноль - PullRequest
1 голос
/ 02 июня 2010

Я пытаюсь получить процентные данные из хранимой процедуры, используя код, подобный строке ниже. Очевидно, что это вызовет проблему (ошибка деления на ноль), когда base. [XXX_DataSetB] вернет 0, что может случиться иногда.

Кто-нибудь знает, как я могу справиться с этим наиболее эффективным способом?

Примечание. Было бы около 20+ строк, похожих на приведенную ниже ...

cast((base.[XXX_DataSetB] - base.[XXX_DataSetA]) as decimal) / 
                            base.[XXX_DataSetB] as [XXX_Percentage]

Ответы [ 2 ]

2 голосов
/ 02 июня 2010

Я полагаю, это зависит от того, какое поведение вы ожидаете, когда XXX_DataSetB равен нулю.

Если вы не хотите возвращать строки, которые могут вызвать ошибку, вы можете легко отфильтровать эти строки, добавив where XXX_DataSetB <> 0 к вашему запросу.

Если вы хотите, чтобы проблемные строки были равны NULL, вы можете использовать оператор case или что-то вроде этого:

cast(([XXX_DataSetB] - [XXX_DataSetA]) as decimal) / nullif([XXX_DataSetB], 0)
1 голос
/ 02 июня 2010

Я бы принудил среднее значение к нулю, сделав нижний член нулевым вместо нуля:

cast((base.[XXX_DataSetB] - base.[XXX_DataSetA]) as decimal) 
     / case when base.[XXX_DataSetB] = 0 then null 
         else base.[XXX_DataSetB] end as [XXX_Percentage] 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...