powered by simpleCommunicator - 2.0.59     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Процедурные параметры в where
6 сообщений из 6, страница 1 из 1
Процедурные параметры в where
    #32017872
Yorik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Коллеги не подкинете ли идейку аль реализацию оной по решению следующей проблемы:
Есть входные параметры у процедурочки. Суть этой процедурочки - запросик, а запросик этот с горизонтальным фильтриком 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 '

А дальше?
...
Рейтинг: 0 / 0
Процедурные параметры в where
    #32017875
set @sql=@sql+'where 1=1 '
а все параметры добавлять с предваряющим ' AND '
...
Рейтинг: 0 / 0
Процедурные параметры в where
    #32017878
Yorik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ой-ля-ля
Все гениальное просто. Большой спасибомс.
...
Рейтинг: 0 / 0
Процедурные параметры в where
    #32017879
Фотография SergSuper
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
еще можно не делать динамический запрос, а писать селект как-то так:
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)
...
Рейтинг: 0 / 0
Процедурные параметры в where
    #32017884
Так делать нежелательно по соображениям производительности. Операции OR препядствуют эффективному использованию индексов оптимизатором. Как раз динамический запрос в данном случае эффективнее, а время затрачиваемое на составление плана запроса пренебрежимо мало по сравнению со временем исполнения запроса. В данном случае играет существенную роль свойство динамического запроса - всегда актуальный план запроса при любых параметрах. В статическом запросе (процедуре) с параметрами план получается наиболее эффективным только при значениях параметров, которые были при первом запуске запроса. При других значениях параметров план исполнения не будет являться оптимальным, особенно в запросах, где значение параметра меняет логику критериев выборки типа "where (FieldA=@a or @a is null)".
...
Рейтинг: 0 / 0
Процедурные параметры в where
    #32018194
Фотография Garya
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Согласен с Глебом. Добавлю только, что когда возникает желание написать что-то вроде ...where FieldA=@a or @a is null, я избавляюсь от "or" следующим образом:
...where IsNull(@a,FieldA)=FieldA
...
Рейтинг: 0 / 0
6 сообщений из 6, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Процедурные параметры в where
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]