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

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

ПОМОГИТЕ грамотно организовать поиск на базе SP? [MSSQL]


DBDev ©   (2003-05-29 16:54:00) 

Собирать в процедуре текст запроса, а затем выполнять:
напр:

declare @query_text nvarchar(512)
declare @IsStated INT
SET @IsStated = 0
SET @query_text = "SELECT * FROM Base "
if (@RegPlaceID <> "0")
begin
if (@IsStated = 0)
begin
SET @IsStated = 1
SET @query_text = @query_text + " WHERE RegPlaceID = " + @RegPlaceID
end
...

exec sp_executesql @query_text


Если собирать, то каким образом строить выражения содержащие строки, то есть:

SET @query_text = @query_text + " WHERE Reg LIKE = " + СИМВОЛ_КАВЫЧКИ + @Reg + СИМВОЛ_КАВЫЧКИ

Что есть символ кавычки в этом случае ?

А если сразу выполять, то как прописать случай если фильтр равен нулю, не писать же и впрям конструкции типа:

IF @SupplierID = 0
Select a,b,c from T
IF @SupplierID <> 0
Select a,b,c from T WHERE SupplierID = @SupplierID


MOA   (2003-05-29 18:37:00) [1]

1.Можно слегка упростить сборку, если воспользоваться CASE.
2. Проблема с правами в случае EXEC остаётся.
3. Почему бы не использовать NULL для аргументов, не участвующих в фильтрации? Вот, посмотрите:
SELECT * FROM MyTable WHERE (ID_1=ISNULL(@ID_1, ID_1)) AND (ID_2=ISNULL(@ID_2, ID_2))

4. М.б., формировать запрос на клиенте?


DBDev   (2003-05-29 18:19:00) [2]

ОК, сенкс!


MOA   (2003-05-29 18:00:00) [3]

"""" - это 4 апострофа.


MOA   (2003-05-29 17:59:00) [4]

SET @query_text = @query_text + " WHERE Reg LIKE = " + """" + @Reg + """"
EXEC(@query_text)

См. BOL "Using char and varchar Data"
Удачи!


MOA   (2003-05-29 17:49:00) [5]

>при котором подходе?
При сборе SQL - выражения и последующем его выполнении при помощи EXEC.


bushmen   (2003-05-29 17:24:00) [6]

И что за ошибку выдаёт?


bushmen   (2003-05-29 17:21:00) [7]

DBDev > Тогда напиши полностью свою ХП. @RegPlaceID - какой тип и какой тип столбца RegPlaceID?


DBDev   (2003-05-29 17:17:00) [8]

2 bushmen:

SET @query_text = @query_text + " WHERE Reg LIKE = " + """ + @Reg + """
EXEC(@query_text)



""" - это 3 одинарные кавычки? Не получается так!


DBDev   (2003-05-29 17:09:00) [9]

2 МОА: Это при котором подходе?


MOA   (2003-05-29 17:08:00) [10]

К сожалению, при таком подходе неизбежны некоторые трудности, связанные с правами на таблицы/представления и правами на процедуры. Дело в том, что EXEC выполняется не от имени владельца процедуры, а от имени вызвавшего её юзера (все остальные операторы в процедуре - как положено, от имени владельца).
Удачи!


bushmen   (2003-05-29 16:57:00) [11]

SET @query_text = @query_text + " WHERE Reg LIKE = " + """ + @Reg + """
EXEC(@query_text)


Наверх

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