|
|
|
Использование ANSI_NULLS
|
|||
|---|---|---|---|
|
#18+
Вопрос о стиле. Регулярно пишу в хранимых процедурах, например, Код: plaintext Разумеется, SET ANSI_NULLS OFF перед созданием каждой процедуры. Получил замечание от коллег за дурной стиль (кто-то из них каким-то образом процедуру пересоздал, а флажок ANSI_NULLS не опустил - все работать перестало). Хотелось бы узнать, кто как пишет? И действительно ли дурной стиль? Только одно соображение: ведь сравнение с NULL все-таки имеет право быть. Например, в простейшей процедуре: Код: plaintext 1. 2. 3. Ведь имеем мы право получить все пустые (NULL) значения с помощью такой процедуры? В общем, просьба высказать мнение. Спасибо! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.12.2002, 21:02:05 |
|
||
|
Использование ANSI_NULLS
|
|||
|---|---|---|---|
|
#18+
Коллеги, ваши правы обратите внимание на 2 веши @var is null и функцию isNull(@val1,@val2) с помощью isNull очень часто можно писать локаничные запросы в where Пользоваться @input_parameter = NULL, или любыми другими операторами сравнения, достаточно опасно при любых установках. В форуме как то было обсуждение экспериментов с SET ANSI_NULLS, и последствий применения сранения с неопределенным значением (null) С уважением, Сергей. p.s. в вашем случае я бы написал WHERE SimpleField=@val or @val is null ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.12.2002, 21:30:09 |
|
||
|
Использование ANSI_NULLS
|
|||
|---|---|---|---|
|
#18+
Уважаемый Сергей, благодарю за ответ. >>достаточно опасно при любых установках вот в этом и вопрос: в чем опасность-то? Ну если кто-то процедуру перекомпилил без меня - это все-таки проблема организационная, а не техническая. Или я неправ? >>WHERE SimpleField=@val or @val is null - совсем не понятно, задачи не решает. Ну вот еще простейший пример: в таблице описаны иерархические отношения - два поля: id, id_parent. Очевидно, что для элементов верхнего уровня id_parent=NULL. Значит ли это, что для получения всех элементов верхнего уровня нужно писать отдельный кусок кода: Код: plaintext или вполне нормально (с точки зрения стиля!) универсальное Код: plaintext ??? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.12.2002, 00:45:39 |
|
||
|
Использование ANSI_NULLS
|
|||
|---|---|---|---|
|
#18+
пардон: если в вашей процедуре поставить условие WHERE SimpleField=@val or (@val is null and SimpleField is null) то для получения желаемой вами выборки, где SimpleField null достаточно передать в качестве параметра процедуры @val=null а в случае с деревом тоже самое where id_parent=@idParent or (@idParent is null and id_parent is null) или так, я делал раньше, когда не знал про is null операнд, пользовался функцией where isNUll(@idParent,'-1000')=isNUll(id_parent,'-1000') здесь -1000 заведомо невозможное значение id узла, это IMHO криво. сравнивать с null очень непросто (вы знаете чему равно неопределенное значение?) соответственно использование его сравнения и операций основанных на нем, например сортировка и т.д. могут привести к очень труднодеагностируемым ошибкам, а если еще и джойны в запросе... з.ы. для примера попробуйте воспользоваться поиском в форуме это подробно разбиралось С уважением, Сергей. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.12.2002, 07:50:45 |
|
||
|
|

start [/forum/topic.php?fid=46&msg=32074901&tid=1818359]: |
0ms |
get settings: |
5ms |
get forum list: |
10ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
44ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
28ms |
get tp. blocked users: |
1ms |
| others: | 206ms |
| total: | 308ms |

| 0 / 0 |
