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:55: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


Sandman25   (2003-05-30 11:03:00) [1]

Упс, пробелы перед AND забыл :)


Sandman25   (2003-05-30 10:57:00) [2]

IF @SupplierID <> 0
SET @query_text = @query_text + "WHERE SupplierID = @SupplierID"

А если условий несколько, то делаешь так
SET @query_text = "select * from t1 where 1=1"
IF @SupplierID <> 0
SET @query_text = @query_text + "AND SupplierID = @SupplierID"
IF @Detail <> 0
SET @query_text = @query_text + "AND Detail = @Detail"
IF @PostNumber <> 0
SET @query_text = @query_text + "AND PostNumber = @PostNumber"


SergSuper   (2003-05-30 10:27:00) [3]

откуда такая любовь к динамическим запросам?
написать 4 строчки - это нагромаждать, а написать 13 строчек с динамическим запросом - это типа нет, типа понятней стало
ну не знаю, я бы так написал
Select a,b,c from T WHERE SupplierID = @SupplierID or @SupplierID = 0


NAlexey   (2003-05-29 17:09:00) [4]

Оговорюсь: Грамотно нагромаждать -


IF @SupplierID = 0
SET @Part = ""
IF @SupplierID <> 0
SET @Part = "WHERE SupplierID = @SupplierID"
SET @query_text = @query_text + @Part


NAlexey   (2003-05-29 17:06:00) [5]

>Что есть символ кавычки в этом случае ?
" "" - это есть символ кавычки
>не нагромождать же процедуру и впрям
нагромождать


Наверх

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