|
параметры и dbnull
|
|||
---|---|---|---|
#18+
Помогите разобраться. Выбираю все уникальные сочетания элементов, составляющие адрес( так получилось, что в бд под разными Id есть одинаковые значения адресов. Понадобилось выбрать I'd все уникальных адресов. Значения из одного запроса передаются значениям параметров другого заросла. Но вот беда - если, например, в бд значение корпуса null, то запрос поиска Id не возвращает значения. Код: c# 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. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. 74. 75. 76. 77. 78. 79.
... |
|||
:
Нравится:
Не нравится:
|
|||
04.10.2016, 13:55 |
|
параметры и dbnull
|
|||
---|---|---|---|
#18+
Алексей Шм., (nkorp=@nkorp or @nkorp is null) ... |
|||
:
Нравится:
Не нравится:
|
|||
04.10.2016, 15:47 |
|
параметры и dbnull
|
|||
---|---|---|---|
#18+
buserАлексей Шм., (nkorp=@nkorp or @nkorp is null) Спасибо, что откликнулись! Если я добавлю в запрос это (nkorp=@nkorp or nkorp is null) and (nkw=@nkw or nkw is null), то на выходе получаю: корп кв NULL 14 NULL NULL NULL NULL NULL 14 NULL То есть в ответ попадают и квартиры с номером (14), попадающие в запрос через параметр, и дома без квартир, т.е. с null ... |
|||
:
Нравится:
Не нравится:
|
|||
05.10.2016, 03:33 |
|
параметры и dbnull
|
|||
---|---|---|---|
#18+
То есть мне нужно, чтобы выбрались строки (средняя строка), где квартира null. В параметр и переадается DbNull.Value, но запрос не отрабатывается, не находит записи. При добавлении or.. запрос расширяет условия поиска, что мне не нужно. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.10.2016, 03:42 |
|
параметры и dbnull
|
|||
---|---|---|---|
#18+
Алексей Шм., если у Вас значение параметра DBNull.Value, то в запросе должно быть просто nkorp IS NULL без всяких OR. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.10.2016, 06:16 |
|
параметры и dbnull
|
|||
---|---|---|---|
#18+
skyANAАлексей Шм., если у Вас значение параметра DBNull.Value, то в запросе должно быть просто nkorp IS NULL без всяких OR. То есть мне на этапе присваивания значения параметрам проверять, если параметр DbNull.Value, то менять для этого параметра сам текст запроса? ... |
|||
:
Нравится:
Не нравится:
|
|||
05.10.2016, 06:22 |
|
параметры и dbnull
|
|||
---|---|---|---|
#18+
Алексей Шм., Пока работает так Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14.
Но это же костыль ... |
|||
:
Нравится:
Не нравится:
|
|||
05.10.2016, 06:23 |
|
параметры и dbnull
|
|||
---|---|---|---|
#18+
Алексей Шм.skyANAАлексей Шм., если у Вас значение параметра DBNull.Value, то в запросе должно быть просто nkorp IS NULL без всяких OR. То есть мне на этапе присваивания значения параметрам проверять, если параметр DbNull.Value, то менять для этого параметра сам текст запроса? Не менять текст запроса, а формировать его в зависимости от параметров. Собирать условие WHERE из отдельных кусочков. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.10.2016, 06:42 |
|
параметры и dbnull
|
|||
---|---|---|---|
#18+
skyANAАлексей Шм.пропущено... То есть мне на этапе присваивания значения параметрам проверять, если параметр DbNull.Value, то менять для этого параметра сам текст запроса? Не менять текст запроса, а формировать его в зависимости от параметров. Собирать условие WHERE из отдельных кусочков. Понял. Но неужели параметр не понимает, что если он DbNull.Value, то в запросе нужно автоматически прикинуться is null...( вопрос риторический..) ... |
|||
:
Нравится:
Не нравится:
|
|||
05.10.2016, 06:45 |
|
параметры и dbnull
|
|||
---|---|---|---|
#18+
Алексей Шм.skyANAпропущено... Не менять текст запроса, а формировать его в зависимости от параметров. Собирать условие WHERE из отдельных кусочков. Понял. Но неужели параметр не понимает, что если он DbNull.Value, то в запросе нужно автоматически прикинуться is null...( вопрос риторический..) А Ваш программный код понимает что-то большее, чем в него заложено? :) ... |
|||
:
Нравится:
Не нравится:
|
|||
05.10.2016, 06:51 |
|
параметры и dbnull
|
|||
---|---|---|---|
#18+
Алексей Шм.если параметр DbNull.Value, то менять для этого параметра сам текст запроса? Есть несколько вариантов. Универсальный: Код: sql 1.
Если есть недопустимые значения для поля nasp (например 0) то можно так Код: sql 1.
... |
|||
:
Нравится:
Не нравится:
|
|||
05.10.2016, 06:53 |
|
параметры и dbnull
|
|||
---|---|---|---|
#18+
Напутал немного, универсальный такой Код: c# 1.
... |
|||
:
Нравится:
Не нравится:
|
|||
05.10.2016, 06:56 |
|
параметры и dbnull
|
|||
---|---|---|---|
#18+
И второй не дописал Код: sql 1.
... |
|||
:
Нравится:
Не нравится:
|
|||
05.10.2016, 06:59 |
|
параметры и dbnull
|
|||
---|---|---|---|
#18+
Dima T, научите сейчас человека писать запросы, что не используют индексов, а его потом поругают за тормоза :) ... |
|||
:
Нравится:
Не нравится:
|
|||
05.10.2016, 07:13 |
|
параметры и dbnull
|
|||
---|---|---|---|
#18+
skyANADima T, научите сейчас человека писать запросы, что не используют индексов, а его потом поругают за тормоза :) Универсальный вариант 19744455 использует индекс. По второму согласен, если индекс есть, то лучше так не писать. С другой стороны у человека появится повод научиться смотреть и понимать план выполнения запроса :) ... |
|||
:
Нравится:
Не нравится:
|
|||
05.10.2016, 07:40 |
|
параметры и dbnull
|
|||
---|---|---|---|
#18+
Dima TskyANADima T, научите сейчас человека писать запросы, что не используют индексов, а его потом поругают за тормоза :) Универсальный вариант 19744455 использует индекс.Будет Index Scan в лучшем случае. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.10.2016, 08:16 |
|
параметры и dbnull
|
|||
---|---|---|---|
#18+
Алексей КDima Tпропущено... Универсальный вариант 19744455 использует индекс.Будет Index Scan в лучшем случае. Проверь. У меня MS SQL в плане index seek пишет. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.10.2016, 08:19 |
|
параметры и dbnull
|
|||
---|---|---|---|
#18+
Dima TАлексей Кпропущено... Будет Index Scan в лучшем случае. Проверь. У меня MS SQL в плане index seek пишет.Спорить не собираюсь. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.10.2016, 08:32 |
|
параметры и dbnull
|
|||
---|---|---|---|
#18+
Dima TАлексей Кпропущено... Будет Index Scan в лучшем случае. Проверь. У меня MS SQL в плане index seek пишет.А ведь действительно это выдаёт на MSSQL 2012 Index Seek. Не знал. Код: sql 1.
... |
|||
:
Нравится:
Не нравится:
|
|||
05.10.2016, 08:46 |
|
параметры и dbnull
|
|||
---|---|---|---|
#18+
@v ведь не меняется во время выполнения запроса, поэтому при @v = null можно упростить до Код: c# 1.
иначе Код: c# 1.
Технически это не сложно сделать при разборе текста запроса. Думаю что-то подобное MSSQL делает во время построения плана запроса, откидывает заведомо ложные части условия. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.10.2016, 09:12 |
|
параметры и dbnull
|
|||
---|---|---|---|
#18+
Много работал с такими запросами, дающими Index Scan, поэтому перепутал. Код: sql 1.
А в данном случае реализуется паттерн сравнения необязательных значений, когда null == null is true , как у всех нормальных людей, а не как в древнем стандарте SQL, написанном странными людьми. Предполагаю, что данный паттерн тупо зашит в оптимизатор. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.10.2016, 09:22 |
|
параметры и dbnull
|
|||
---|---|---|---|
#18+
Алексей КМного работал с такими запросами, дающими Index Scan, поэтому перепутал. Код: sql 1.
Какой seek может быть, если при @v = null твой запрос вырождается в такой Код: c# 1.
Алексей Ккогда null == null is true , как у всех нормальных людей, а не как в древнем стандарте SQL С null много граблей в SQL. Математики впилили в SQL троичную логику , а в алгоритмических ЯП двоичная осталась, кто не в курсе - наступает на грабли. Последний раз наступал на where ... not in (null) ... |
|||
:
Нравится:
Не нравится:
|
|||
05.10.2016, 09:43 |
|
параметры и dbnull
|
|||
---|---|---|---|
#18+
Алексей КМного работал с такими запросами, дающими Index Scan, поэтому перепутал. Код: sql 1.
Недопонял сразу. Затестил с @v != null действительно в скан уходит. Не такой уж и умный оптимизатор, как хотелось бы. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.10.2016, 09:50 |
|
|
start [/forum/topic.php?fid=20&msg=39320708&tid=1400317]: |
0ms |
get settings: |
11ms |
get forum list: |
13ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
42ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
60ms |
get tp. blocked users: |
1ms |
others: | 263ms |
total: | 407ms |
0 / 0 |