Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 ненужнуе дублирование одного и тогоже запроса  [new]
Che0
Member

Откуда:
Сообщений: 299
если у меня есть запрос
пускай вот
select * from table;
и взависимости от какого входного параметра(ну пускай будет уровень доступа)
накладываеться четыри варианта достаточно сложных условий от которых зависит результат запроса

вот к примеру
if AccessLevel=1  select * from table where param in ...
if AccessLevel=2  select * from table where param in...
if AccessLevel=3  select * from table where param in...
if AccessLevel=4  select * from table where param in...
условия всегда представляют собой столбец данных
запрос мой достаточно большой и дублировать его четыри раза нехочеться можно ли как то вначале вычислять мое уловие и какую нибудь ссылку ему присвоить(ну или как то подругому, может его можно как то втиснуть после WHERE param in), чтоб потом ссылаться на него можно было. Тогда тостаточно будет одного запроса
11 июл 11, 21:47    [10958393]     Ответить | Цитировать Сообщить модератору
 Re: ненужнуе дублирование одного и тогоже запроса  [new]
Knyazev Alexey
Member

Откуда: Екб -> Мск
Сообщений: 10233
Блог
CASE
11 июл 11, 21:52    [10958406]     Ответить | Цитировать Сообщить модератору
 Re: ненужнуе дублирование одного и тогоже запроса  [new]
vadim-tmn
Member

Откуда:
Сообщений: 52
declare @str varchar(max)
set @str='select * from [1] where id>50' -- ваш большой запрос
declare @par int
set @par=1
-- добавление доп. условий и прочего
set @str=@str+
case
when @par=0 then ' order by id desc'
when @par=1 then ' order by id '
end

EXECUTE(@str)
12 июл 11, 08:26    [10959467]     Ответить | Цитировать Сообщить модератору
 Re: ненужнуе дублирование одного и тогоже запроса  [new]
@param
Guest
declare @param table (AccessLevel int, param_value int)
insert @param(AccessLevel, param_value)
select 1,1
union all
select 1,2
union all
select 2,3
union all
select 2,4
union all
select 3,5

select * 
from table where param in (select param_value from @t where AccessLevel = @AccessLevel) 
13 июл 11, 07:38    [10965352]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить