Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.06.26;
Скачать: 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 вся ветка

Текущий архив: 2003.06.26;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.016 c
1-84256
LamuS
2003-06-08 22:12
2003.06.26
Младшая цифра


1-84114
Rafik
2003-06-10 15:55
2003.06.26
Можно ли распечатать содержимое TreeView1?


3-83943
Danchik
2003-05-29 13:29
2003.06.26
вопрос по DBGrid


3-83991
KSergey
2003-05-27 15:27
2003.06.26
Можно ли вставлять комментарии в текст SQL-запроса...


14-84650
` frizZ. `
2003-06-10 12:07
2003.06.26
От чего зависит размер скомпилированного файла ?