Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Процедурные параметры в where
|
|||
|---|---|---|---|
|
#18+
Коллеги не подкинете ли идейку аль реализацию оной по решению следующей проблемы: Есть входные параметры у процедурочки. Суть этой процедурочки - запросик, а запросик этот с горизонтальным фильтриком Where, а фильтрик этот жаждет получить те самые входные параметры процедурочки, а входные параметры динамические, то бишь могет один будет введен, могет два, могет ....... Слепить их в Where не составит труда, но вот определить добавлять ли and перед параметром(вдруг он первый). Прям засада какая-то получается Например: CREATE PROCEDURE TUTU @a varchar(50) = null, @b varchar(50) = null, @c varchar(50) = null ....... AS declare @sql varchar(200) set @sql='Select Field1, Field2, Field3 ..... From Table ' if @a is not null or @b is not null or @c is not null..... set @sql=@sql+'where ' А дальше? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.11.2001, 10:44 |
|
||
|
Процедурные параметры в where
|
|||
|---|---|---|---|
|
#18+
set @sql=@sql+'where 1=1 ' а все параметры добавлять с предваряющим ' AND ' ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.11.2001, 10:58 |
|
||
|
Процедурные параметры в where
|
|||
|---|---|---|---|
|
#18+
Ой-ля-ля Все гениальное просто. Большой спасибомс. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.11.2001, 11:08 |
|
||
|
Процедурные параметры в where
|
|||
|---|---|---|---|
|
#18+
еще можно не делать динамический запрос, а писать селект как-то так: CREATE PROCEDURE TUTU @a varchar(50) = null, @b varchar(50) = null, @c varchar(50) = null ....... AS Select Field1, Field2, Field3 ..... From Table where (FieldA=@a or @a is null) and (FieldB=@b or @b is null) and (FieldC=@c or @c is null) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.11.2001, 11:26 |
|
||
|
Процедурные параметры в where
|
|||
|---|---|---|---|
|
#18+
Так делать нежелательно по соображениям производительности. Операции OR препядствуют эффективному использованию индексов оптимизатором. Как раз динамический запрос в данном случае эффективнее, а время затрачиваемое на составление плана запроса пренебрежимо мало по сравнению со временем исполнения запроса. В данном случае играет существенную роль свойство динамического запроса - всегда актуальный план запроса при любых параметрах. В статическом запросе (процедуре) с параметрами план получается наиболее эффективным только при значениях параметров, которые были при первом запуске запроса. При других значениях параметров план исполнения не будет являться оптимальным, особенно в запросах, где значение параметра меняет логику критериев выборки типа "where (FieldA=@a or @a is null)". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.11.2001, 12:33 |
|
||
|
|

start [/forum/topic.php?fid=46&fpage=3526&tid=1824776]: |
0ms |
get settings: |
11ms |
get forum list: |
21ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
47ms |
get topic data: |
14ms |
get forum data: |
4ms |
get page messages: |
62ms |
get tp. blocked users: |
2ms |
| others: | 255ms |
| total: | 424ms |

| 0 / 0 |
