![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как правильнее запрос через ADO или хранимка и sp_executeSql [D7, MSSQL]
svv © (2006-07-20 13:41:00)Добрый день!!!
Вот какой вопрос:
есть таблица названий городов, с полем del-признак удалеенности строки.
Почти всегда надо запрашивать данные без удаленных, поэтому подумал что правильнее использовать Хранимую процедуру, НО ИНОГДА НАДО ЗАПРАШИВАТЬ ВСЕ ЗАПИСИ и вот тут возник этот вопрос.
А именно - как сделать правильнее, вот кикие виже варинты (указываю все которое придумал):
1. обычный селект через ADOQuery и если надо дописывать WHERE del=0 или не дописывать этого
2. Две хранимки, Get_goroda и get_gorodaall - но этот вариант не нравиться
3. Хранимка с sp_execsql и по значению параметра менять выполняемый запрос
4. ADOQuery с sp_execsql
Вот. И что выбрать?
ЗЫ Ожидается много пользователей, так что сохранение плана выполнения не так уж и плохо...
Большое Спасибо!
svv (2006-07-20 14:23:00) [1]2: stone
Спасибо!!!! Что-то я не сообразил...
Что-то такое и надо было!
Ega23 (2006-07-20 13:59:00) [2]
CREATE PROCEDURE S_ ......
@ActNam varchar(32)='NONE',
@Del int=-1,
...... Остальные параметры
AS
Declare
@Result int;
Select @ActNam=RTrim(LTrim(UPPER(@ActNam)));
Set @Result=0;
if ActNam='SEL'
begin
Select * from ....
where (@Del=-1 or Del=@Del)
end;
FIN:
Set Nocount OFF;
return(@result);
GO
exec S_.... @ActNam='SEL' - вернёт всё
exec S_.... @ActNam='SEL', @Del=0 - вернёт всё, где del=0
exec S_.... @ActNam='SEL', @Del=1 - вернёт всё, где del=1
stone (2006-07-20 13:57:00) [3]
> 2. Две хранимки, Get_goroda и get_gorodaall - но этот вариант
> не нравиться
Достаточно одной
create procedure Get_goroda
@Del bit = null
as
select * from goroda where @Del is null or del=@Del
таким образом сможешь получать не только все записи но и по выбору удаленные/не удаленные