Форум: "Базы";
Текущий архив: 2003.06.26;
Скачать: [xml.tar.bz2];
ВнизПОМОГИТЕ грамотно организовать поиск на базе 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;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.029 c