Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности

Новые сообщения [новые:0]
Дайджест
Горячие темы
Избранное [новые:0]
Форумы
Пользователи
Статистика
Статистика нагрузки
Мод. лог
Поиск
|
|
27.11.2001, 10:44
|
|||
|---|---|---|---|
|
|||
Процедурные параметры в 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:58
|
|||
|---|---|---|---|
|
|||
Процедурные параметры в where |
|||
|
#18+
set @sql=@sql+'where 1=1 ' а все параметры добавлять с предваряющим ' AND ' ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
27.11.2001, 11:08
|
|||
|---|---|---|---|
|
|||
Процедурные параметры в where |
|||
|
#18+
Ой-ля-ля Все гениальное просто. Большой спасибомс. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
27.11.2001, 11:26
|
|||
|---|---|---|---|
Процедурные параметры в 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, 12:33
|
|||
|---|---|---|---|
|
|||
Процедурные параметры в where |
|||
|
#18+
Так делать нежелательно по соображениям производительности. Операции OR препядствуют эффективному использованию индексов оптимизатором. Как раз динамический запрос в данном случае эффективнее, а время затрачиваемое на составление плана запроса пренебрежимо мало по сравнению со временем исполнения запроса. В данном случае играет существенную роль свойство динамического запроса - всегда актуальный план запроса при любых параметрах. В статическом запросе (процедуре) с параметрами план получается наиболее эффективным только при значениях параметров, которые были при первом запуске запроса. При других значениях параметров план исполнения не будет являться оптимальным, особенно в запросах, где значение параметра меняет логику критериев выборки типа "where (FieldA=@a or @a is null)". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|

start [/forum/topic.php?fid=46&mobile=1&tid=1824776]: |
0ms |
get settings: |
8ms |
get forum list: |
12ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
51ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
30ms |
get tp. blocked users: |
1ms |
| others: | 220ms |
| total: | 338ms |

| 0 / 0 |
