| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > MS SQL Server > Настройка NULL-значений |
| Автор: MadCoder 29.9.2009, 10:27 | ||
| Доброго времени суток! Подскажите, есть ли возможность настроить БД так, чтобы следующий код:
выдавал не NULL, если одно из значений (last_name, first_name, mid_name) is NULL. isNULL и COALESCE не предлагать - написать куча селектов в скриптах и программах, не хочется везде прописывать. Также интересует, какие последствия кроме сложения с NULL это может дать: будут ли верно работать isNULL, is NULL, is not NULL и т.д. |
| Автор: Zloxa 29.9.2009, 11:22 | ||||
http://msdn.microsoft.com/ru-ru/library/ms176056%28SQL.90%29.aspx
Добавлено через 3 минуты и 12 секунд
|
| Автор: MadCoder 29.9.2009, 11:46 | ||
Интересно, а почему так? Че это грозит? |
| Автор: Zloxa 29.9.2009, 12:19 |
Потому что фича лишь для обратной совместимости реализована Там же написано...."В будущей версии Microsoft SQL Server эта возможность будет удалена" Судя по тому, что M$ сделали с офисом и IE8, начинает казаться вполне допустимым, что эти угрозы могут сбыться. |
| Автор: Akina 29.9.2009, 12:39 |
| MadCoder, а почему непременно хочется оставить всё сделанным через то самое место? Какую великую смысловую нагрузку несут эти самые Null? |
| Автор: MadCoder 29.9.2009, 13:58 | ||
Потому что в результате комплиментации нула, например если пользователь не указал свое отчество, у нас будет не фио, а NULL. ИзНулл везде переписывать не слишком хочется, но видимо придется. |
| Автор: Akina 29.9.2009, 14:04 |
| Нет, блин, кому я тут распинаюсь-отвечаю, а? Ну переписывай... |
| Автор: SharedNoob 1.10.2009, 19:57 |
| юзайте вьюхи. |
| Автор: DimW 2.10.2009, 12:17 | ||
Akina, а в MSSQL разве null и пустая строка это не одно и то же? в оракле такого разделения нет:
Добавлено через 5 минут и 6 секунд как использование вьюх спасет от переработки кода? |
| Автор: Akina 2.10.2009, 12:36 | ||
DimW, я в ораклах ничего не понимаю, но ... Что будет если так:
|
| Автор: Zloxa 2.10.2009, 12:46 |
| DimW, В M$ пустая строка не null Akina, В оракле пустая строка is null (со всеми вытекающими, интуитивно неочевидными для пришельцев с других платформ: - типа length('') возвращает null а не 0) Добавлено @ 12:55 Вьюхи выставить клиенту вместо таблиц. Во вьюхах вместо нулов возвращать пустые строки. Вполне себе решение, если мы не имеем доступа к исходникам клиента. Однако, я так понял, ТС полностью владеет оными. |
| Автор: Akina 2.10.2009, 13:01 | ||
Какой ужас... |
| Автор: DimW 2.10.2009, 13:03 | ||||
с дрожащими коленями совершаю ретуал сжения девственных книг по mssql запылившихся в нашем шкафу Добавлено через 1 минуту и 58 секунд взаимно Добавлено через 12 минут и 19 секунд я уже не вчем не уверен, но:
т.е. без переименования таблиц не обойтись. |
| Автор: Zloxa 2.10.2009, 13:26 |
Ну да.. когда я использовал слово "вместо", я счел что переименование либо перенос в другую схему подразумевается. ну, на самом деле к этому быстро привыкаешь. Зато потом, привыкнув, ужасом кажестя когда конкатенация с null возвращает null |
| Автор: DimW 2.10.2009, 13:38 |
да, из всего изложенного ИМХО самый не трудоемкий и прозрчный способ подкостылиться. |
| Автор: Zloxa 2.10.2009, 13:45 |
Именно Я жиш ограничил, вроде, область применения этого кастыля. Когда мы имеем возможность модифицировать базу, но не имеем возможность вмешаться в клиентский код. Добавлено через 6 минут и 14 секунд PS. Кстати, в паре проектов я использовал подобные методы не как кастыли а как архитектурное решение. Вьюхи выставлялись клиенту в качестве интерфейса. Бизнес логика реализовывалась в instead of триггерах. Удобно? Безусловно! Мне даже кажется что вьюха, в качестве интерфейса, много более эстетична нежели пакет с торчащими из него процедурами "на все случаи жизни" |
| Автор: DimW 2.10.2009, 14:11 |
такое архитектурное решение на пустом месте не возникло ведь? обычно такой подход используют когда логическая сущность, физицески состоит из нескольких таблиц со связью один к одному, других мотиваций для использования такой архитектуры я не вижу. разве что от скуки. |
| Автор: Zloxa 2.10.2009, 15:18 |
| Ех.. чота мы в офтоп уходим.... Будучи комодом, чуствую себя обязанным поругаться: Модератор: Давайте вернёмся к теме обсуждения. Но будучи еще и участником, не могу не ответить Приходилось хранить в базе расчетные значения. В качестве аргументов для расчета использовались данные из нескольких таблиц. Реализация расчетов в триггерах, сам понимаешь почему не канает - мутация и дедлоки. Пришлось серьезно повозиться над контролем согласованности даннынх. Честно говоря на том проекте впервые столкнулся с задачей, для реализации которой предпочтительнее блокировочник а не версионник. Принципиальное отсутствие SHARED/*http://ru.wikipedia.org/wiki/%D0%91%D0%BB%D0%BE%D0%BA%D0%B8%D1%80%D0%BE%D0%B2%D0%BA%D0%B0_(%D0%A1%D0%A3%D0%91%D0%94)#.D0.A1.D0.BE.D0.B2.D0.BC.D0.B5.D1.81.D1.82.D0.BD.D1.8B.D0.B5_.D0.B1.D0.BB.D0.BE.D0.BA.D0.B8.D1.80.D0.BE.D0.B2.D0.BA.D0.B8*/ LOCK в Оракле очень портит жизнь на таких задачах. Собственным решением оказался крайне не удовлетворен. Но использование вьюхи вместо АПИ было очень даже в тему. |
| Автор: DimW 2.10.2009, 15:39 |
если не здесь, то где еще... MadCoder, приношу извинения, отвлекся |