Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Как параметризовать запрос по условию is null / is not null ?
|
|||
|---|---|---|---|
|
#18+
Предположим, что в некой таблице есть некое поле (это из разряда фантастики, но все же предположим). Как написать параметризуемый запрос, который позволит как искать данные по точному вхождению этих полей, так и по условию null/not null ? where Value=@Param1 не подходит. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.09.2018, 14:03 |
|
||
|
Как параметризовать запрос по условию is null / is not null ?
|
|||
|---|---|---|---|
|
#18+
а, ну и чтобы было достаточно производительным при поиске - читай индексы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.09.2018, 14:13 |
|
||
|
Как параметризовать запрос по условию is null / is not null ?
|
|||
|---|---|---|---|
|
#18+
WaspNewCoreчитай индексы.Тогда так Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. Или так Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. Или строить динамический запрос. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.09.2018, 14:33 |
|
||
|
Как параметризовать запрос по условию is null / is not null ?
|
|||
|---|---|---|---|
|
#18+
Вариант с union all что-то совсем не нравится. Во первых. параметр такой (который нужно проверять на null или реальное значение) может быть не один. А значит, что количество запросов будет степенью двойки от числа этих параметров..... Во вторых. Кроме этого параметра есть же и другие, принимающие участие. А это значит, что база будет вынуждена прогнать два сложных запроса и потом еще объединить результаты через distinct. Во втором случае тоже не очень ясно. У нас имеется 3 ситуации: заполнено, не заполнено, конкретное значение. В примере обрабатывается только is null + точное знаничение. А вот как вписать в это третий вариант с not null ? Динамический запрос тоже не очень нравится. Хотелось как раз уйти от этого. Динамический запрос то я могу и так построить хоть весь, с рекомпилом. Если придется часть строить динамически, а часть параметрами, то проще наверное уж строить динамически весь (ну имеется ввиду, что все равно используя параметры, но в динамически сгенеренном запросе) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.09.2018, 14:45 |
|
||
|
Как параметризовать запрос по условию is null / is not null ?
|
|||
|---|---|---|---|
|
#18+
invmWaspNewCoreчитай индексы.Тогда так Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. Или так Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. Или строить динамический запрос. Value = is null исправил ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.09.2018, 14:48 |
|
||
|
Как параметризовать запрос по условию is null / is not null ?
|
|||
|---|---|---|---|
|
#18+
WaspNewCoreВо втором случае тоже не очень ясно. У нас имеется 3 ситуации: заполнено, не заполнено, конкретное значение.Чем, с точки зрения значения параметра, отличается "заполнено" от "конкретное значение"? 256kValue = is null исправилСпасибо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.09.2018, 15:17 |
|
||
|
Как параметризовать запрос по условию is null / is not null ?
|
|||
|---|---|---|---|
|
#18+
WaspNewCoreпараметризуемый запрос, который позволит как искать данные по точному вхождению этих полей, так и по условию null/not null ? where Value=@Param1 не подходитНу то, что Value - это поле, вроде понятно. Что @Param - параметр, тоже понятно. Что в @Param передаётся значение для поиска - и это понятно. А что будет передаваться, чтобы искать IS NULL (вероятно, NULL), и особенно интересно, что будет передаваться, если надо искать NOT NULL? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.09.2018, 15:18 |
|
||
|
Как параметризовать запрос по условию is null / is not null ?
|
|||
|---|---|---|---|
|
#18+
AkinaWaspNewCoreпараметризуемый запрос, который позволит как искать данные по точному вхождению этих полей, так и по условию null/not null ? where Value=@Param1 не подходитНу то, что Value - это поле, вроде понятно. Что @Param - параметр, тоже понятно. Что в @Param передаётся значение для поиска - и это понятно. А что будет передаваться, чтобы искать IS NULL (вероятно, NULL), и особенно интересно, что будет передаваться, если надо искать NOT NULL? У меня тоже такой вопрос. Думал о разных вариантов - как например передача еще доп параметра, указывающего как трактовать. Но поэтому и спросил тут. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.09.2018, 15:23 |
|
||
|
Как параметризовать запрос по условию is null / is not null ?
|
|||
|---|---|---|---|
|
#18+
только так думаю Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.09.2018, 15:24 |
|
||
|
Как параметризовать запрос по условию is null / is not null ?
|
|||
|---|---|---|---|
|
#18+
invmWaspNewCoreВо втором случае тоже не очень ясно. У нас имеется 3 ситуации: заполнено, не заполнено, конкретное значение.Чем, с точки зрения значения параметра, отличается "заполнено" от "конкретное значение"? Ну если мы хотим найти тех юзеров, у которых это поле в принципе заполнено, не важно чем. Либо если ищем тех чье значение нам точно известно и их хотим найти. Это разные ситуации поиска. Найти всех кто хотя бы раз "что-то там, что привело к заполнению поля" и тех, кто "что-то там ровно 3 раза". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.09.2018, 15:26 |
|
||
|
Как параметризовать запрос по условию is null / is not null ?
|
|||
|---|---|---|---|
|
#18+
WaspNewCoreДумал о разных вариантов - как например передача еще доп параметра, указывающего как трактовать.Теоретически у Value обязан быть некий смысл. А в его рамках обязано существовать некое невозможное значение. Именно такое значение можно использовать как признак "дай мне NOT NULL". Тогда всё превратится в некое (с точностью до синтаксиса) Код: sql 1. 2. 3. 4. Для MS SQL видимо нужно обернуть значения-проверки в IF(). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.09.2018, 15:31 |
|
||
|
Как параметризовать запрос по условию is null / is not null ?
|
|||
|---|---|---|---|
|
#18+
AkinaWaspNewCoreпараметризуемый запрос, который позволит как искать данные по точному вхождению этих полей, так и по условию null/not null ? where Value=@Param1 не подходитНу то, что Value - это поле, вроде понятно. Что @Param - параметр, тоже понятно. Что в @Param передаётся значение для поиска - и это понятно. А что будет передаваться, чтобы искать IS NULL (вероятно, NULL), и особенно интересно, что будет передаваться, если надо искать NOT NULL?Это же очевидно. Параметр должен быть строковым и содержать 'NULL', 'NOT NULL' или конкретные значения. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.09.2018, 15:33 |
|
||
|
Как параметризовать запрос по условию is null / is not null ?
|
|||
|---|---|---|---|
|
#18+
iapПараметр должен быть строковым Только может для строковых параметров стработает, и то с натяжкой, может кто-то захочет искать NULL? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.09.2018, 15:34 |
|
||
|
Как параметризовать запрос по условию is null / is not null ?
|
|||
|---|---|---|---|
|
#18+
Владимир ЗатуливетерiapПараметр должен быть строковым Только может для строковых параметров стработает, и то с натяжкой, может кто-то захочет искать NULL? Ну и передавать 'NULL'. Можно и дальше извращаться. Например, передавать в параметре строку со списком значений (обрабатывать LIKEом, например). Или вообще передавать свои специальные слова. Например, 'ANY' для любого значения. И т.д., как говорится... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.09.2018, 15:39 |
|
||
|
Как параметризовать запрос по условию is null / is not null ?
|
|||
|---|---|---|---|
|
#18+
iap, т.к. это динамический sql в итоге и мы передаем строки в запрос, то имее лишние заморочки с sql injections. поэтому думаю что оптимальный вариант это дополниетльный парметр где указывается режим как именно нужно делать поиск. как выше в примере это можно и без динамического sql сделать с минимальным ущербом для производительности (option recompile). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.09.2018, 15:44 |
|
||
|
Как параметризовать запрос по условию is null / is not null ?
|
|||
|---|---|---|---|
|
#18+
Владимир Затуливетерiap, т.к. это динамический sql в итоге и мы передаем строки в запрос, то имее лишние заморочки с sql injections. поэтому думаю что оптимальный вариант это дополниетльный парметр где указывается режим как именно нужно делать поиск. как выше в примере это можно и без динамического sql сделать с минимальным ущербом для производительности (option recompile).Где динамический SQL?? Код: sql 1. 2. 3. 4. 5. 6. 7. Где тут динамика? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.09.2018, 16:14 |
|
||
|
Как параметризовать запрос по условию is null / is not null ?
|
|||
|---|---|---|---|
|
#18+
iap , а что будет, если в @Param передать честный NULL? юзер - он ведь существо творческое... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.09.2018, 16:30 |
|
||
|
Как параметризовать запрос по условию is null / is not null ?
|
|||
|---|---|---|---|
|
#18+
iap, а ну если так, то динамики нет. но есть другие пробелемы/вопросы: 1. что если необходимо искать по совпадению начала строки, like 'asdf%'? 2. как быть с другими типами? конвертить дату и числа в строку? 3. как поддержать другие операции > < != ? ну и напоследок, а чем собственно плох вариант с доп параметром? вы ведь тоже самое делаете, только пытаетесь в одном параметре держать и поведение и значение, в чем выигрыш вашего подхода? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.09.2018, 16:38 |
|
||
|
Как параметризовать запрос по условию is null / is not null ?
|
|||
|---|---|---|---|
|
#18+
Решение Владимир Затуливетера мне кажется чище, читабельней. И стандартно проще работать с int параметром, чем проверять строковые параметры, где нужно будет учитывать регистр. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.09.2018, 17:03 |
|
||
|
|

start [/forum/topic.php?fid=46&msg=39702169&tid=1689119]: |
0ms |
get settings: |
11ms |
get forum list: |
24ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
136ms |
get topic data: |
11ms |
get forum data: |
2ms |
get page messages: |
76ms |
get tp. blocked users: |
1ms |
| others: | 279ms |
| total: | 546ms |

| 0 / 0 |
