Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Динамически изменяемый запрос из Хранимой процедуры [D5, MSSQL]


pic509 ©   (2006-08-28 10:32:00) 

Люди, подскажите решение следующей задачи:
На сервере MSSQL 2000 я храню таблицу, которая закрыта по выборке для клиентов БД. Для организации доступа к ней я использую Хранимую процедуру. Вся проблема в том, что мне нужно формировать запрос с изменяемыми условиями выборки (передаются как параметры к ХП), например за определенный диапазон дат и (или) по определенному полю и т.п. Я пытался формитровать запрос как строковую переменную, а затем запускать ее EXEC(str). Но в этом случае на клиентской машине срабатывает запрет на выборку. Как еще можно сформировать динамически изменяемый запрос в ХП ???


saxon   (2006-08-28 12:00:00) [1]

Не совсем понятно что есть -   > Динамически изменяемый запросили - > запрос с изменяемыми условиями выборки? Когда он/они меняются?

Если имееться ввиду, что могут приходить по разному проинициализированные параметры, и в зависимости от этого  ... ?

Можно предложить такой вариант :

create procedure Proc1
(
    @pID integer = null,
    ...
)
as
...
select * from Table1 (nolock) where ((@pID is null) or (Table1.ID = @pID) ...
go


pic509   (2006-08-28 11:50:00) [2]

ОГРОМНОЕ СПАСИБО EGA23 !!! Проверил - заработало !!!


Ega23   (2006-08-28 11:43:00) [3]


> Нельзя, но можно построить нормальный запрос.


А, в этом смысле... Понял...

Неясно, правда, что это за архитектура таблиц и пермишенов у автора. Подозрения накладывает...


Fay   (2006-08-28 11:36:00) [4]

2 Ega23 ©   (28.08.06 11:28) [10]
Нельзя, но можно построить нормальный запрос.


Ega23   (2006-08-28 11:28:00) [5]


> Возможно, стоит воспользоваться view
>


Разве во View можно параметры передать?


Ega23   (2006-08-28 11:20:00) [6]


> разве VIEW работает на MSSQL 2000?


Аж поперхнулся...


ANB   (2006-08-28 11:12:00) [7]


> pic509 ©   (28.08.06 11:09) [6]
> разве VIEW работает на MSSQL 2000?

Имхо. Интересно, в какой из приличных СУБД view не работает ?


Fay   (2006-08-28 11:10:00) [8]

2 pic509 ©   (28.08.06 11:09) [6]
Есть не так мгого вещей, которыу там не работают.
Чисто по приколу, почитай BOL.


pic509   (2006-08-28 11:09:00) [9]

разве VIEW работает на MSSQL 2000?


ANB   (2006-08-28 10:55:00) [10]


> т.к. таких выборок клиентская машина должна выполнить как
> минимум несколько 10'000,

Чтобы показать одну форму ? Тогда при любом методе сервер ляжет.


Fay   (2006-08-28 10:51:00) [11]

2 pic509 ©   (28.08.06 10:49) [3]
Ничего не понял. Совсем. Перефразируй.


pic509   (2006-08-28 10:49:00) [12]

это решение не подходит, т.к. таких выборок клиентская машина должна выполнить как минимум несколько 10'000, я думаю сервер просто станет... Нельзя ли одним Динамически изменяемым SELECT выполнить выборку 1 записи???


Fay   (2006-08-28 10:48:00) [13]

2 pic509 ©   (28.08.06 10:32)
Возможно, стоит воспользоваться view


Ega23   (2006-08-28 10:37:00) [14]

Set NoCount ON;
Create Table #Temp (.....);
Exec( 'insert into #Temp Select ... from #yout_temp_table');
Set NoCount OFF;
Select * from #Temp;


первое, что пришло в голову..


Наверх

Титульная страница Поиск, карта сайта Написать письмо