Вниз
Скачать: CL | DM;

ПОМОГИТЕ грамотно организовать поиск на базе SP?   Найти похожие ветки 

← →
DBDev   (2003-05-29 16:54) [0]

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

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


← →
bushmen ©   (2003-05-29 16:57) [1]

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


← →
MOA ©   (2003-05-29 17:08) [2]

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


← →
DBDev   (2003-05-29 17:09) [3]

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


← →
DBDev   (2003-05-29 17:17) [4]

2 bushmen:

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



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


← →
bushmen ©   (2003-05-29 17:21) [5]

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


← →
bushmen ©   (2003-05-29 17:24) [6]

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


← →
MOA ©   (2003-05-29 17:49) [7]

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


← →
MOA ©   (2003-05-29 17:59) [8]

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

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



← →
MOA ©   (2003-05-29 18:00) [9]

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


← →
DBDev   (2003-05-29 18:19) [10]

ОК, сенкс!


← →
MOA ©   (2003-05-29 18:37) [11]

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. М.б., формировать запрос на клиенте?



Страницы: 1 вся ветка

Скачать: CL | DM;



Память: 0.47 MB
Время: 0.021 c
14-84685
passlight
2003-05-23 09:56
2003.06.26
---|Ветка была без названия|---


1-84416
TCrash
2003-06-09 19:55
2003.06.26
Untyped parameters


1-84407
Saracin
2003-06-09 17:46
2003.06.26
Как выровнить один пункт меню например Help к левой границе.


3-84044
iusupp
2003-05-29 02:43
2003.06.26
Как вывести на печать(или вывести в Excel)


3-84018
LZ
2003-05-21 10:12
2003.06.26
Помогите с Алгоритмом преобразования из Access в Paradox




   Наверх