powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Процедура с параметром.
13 сообщений из 13, страница 1 из 1
Процедура с параметром.
    #32326377
Андрей GR
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Народ, у меня простая процедура:
-------------------------------------------------------------------------
SELECT *
FROM T_arm
WHERE Id_otdel=p_id_otdel
-------------------------------------------------------------------------

,где:
Id_otdel - поле
p_id_otdel - параметр.

Вопрос, как сделать условие такое, чтобы при вводе p_id_otdel=0 выводились все записи, а при вводе p_id_otdel<>0 - только записи с нужным номером ?
...
Рейтинг: 0 / 0
Процедура с параметром.
    #32326382
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
WHERE iif(p_id_otdel=0,true,Id_otdel=p_id_otdel)
...
Рейтинг: 0 / 0
Процедура с параметром.
    #32326385
Фотография Latuk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SELECT *
FROM T_arm
WHERE Id_otdel=p_id_otdel OR p_id_otdel=0

Хотя я бы вместо 0 использовал бы NULL
...
Рейтинг: 0 / 0
Процедура с параметром.
    #32326398
Hummer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спросили же - при вводе....
Пишешь:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
CREATE PROCEDURE [dbo].[MyProcedure](@p_id_otdel int =  0 ) AS
IF @p_id_otdel= 0 
BEGIN
    SELECT * 
    FROM T_arm 
END
ELSE BEGIN
    SELECT * 
    FROM T_arm 
    WHERE Id_otdel=@p_id_otdel
END


Если на T-SQL.
...
Рейтинг: 0 / 0
Процедура с параметром.
    #32326427
Фотография Pavel
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если делать так, как советует Hummer , процедура будет компилироваться при каждом вызове. Метод Latuk избавлен от этого недостатка.

Это если на T-SQL.
...
Рейтинг: 0 / 0
Процедура с параметром.
    #32326439
Hummer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 Pavel
Согласен. Не учёл.
...
Рейтинг: 0 / 0
Процедура с параметром.
    #32326455
Фотография Shark
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А мне у Хаммер больше нравится. Хай с ним компилируется(правда я не понимаю, почему), Зато запрос проще и работает шибче:-)
...
Рейтинг: 0 / 0
Процедура с параметром.
    #32326526
incold
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 Shark
А мне у Хаммер больше нравится. Хай с ним компилируется(правда я не понимаю, почему), Зато запрос проще и работает шибче:-)

Посмотри план выполнения процедуры при разных параметрах.
Проще и шибче только с точки зрения человек, но никак не T-SQL
...
Рейтинг: 0 / 0
Процедура с параметром.
    #32326587
Hummer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дело не в компиляции процедуры - не будем путаться - если не стоит WITH RECOMPILE - повторной компиляции не будет, а в логике отбора записей, в данном случае предпочтительнее метод Latuk - вот и всё...

2 incold
План выполнения процедуры одинаков при разных параметрах:)
...
Рейтинг: 0 / 0
Процедура с параметром.
    #32326597
incold
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 Hummer
План выполнения процедуры одинаков при разных параметрах:)

Так а я о чем?!
Ведь с точки зрения человека (или акулы ):
при одном параметре заход в одну ветку - план один
при другом значении параметра заход в другую ветку план другой

А на самом деле: вне зависимости от параметра план строится для двух запросов, а выполняется только один в зависимости от параметра.
В варианте Latuk план всегда одного запроса и выполняется он же всегда один.
...
Рейтинг: 0 / 0
Процедура с параметром.
    #32326608
Hummer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Просто не так понял:)
Ну я уже и написал, и когда Павлу писал - именно это и имел в виду, что при таком подходе необходимо использовать не мой вариант.

Другой вопрос, что план выполнения и перекомпиляция процедуры разные вещи:)
...
Рейтинг: 0 / 0
Процедура с параметром.
    #32326676
Фотография Latuk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
CREATE PROCEDURE [dbo].[MyProcedure](@p_id_otdel int = NULL) AS

SELECT *
FROM T_arm
WHERE @p_id_otdel IS NULL OR Id_otdel=@p_id_otdel

Ecли на T-SQL то получаем преимущества:
1)Не теряем возможности иметь 0-й отдел
2)не надо вводить глупый 0 (просто сразу жмеш Enter)если хочеш получить список всех отделов
3)Когда в выражении OR выполняется первое условие второе уже не просчитывается
4)Оптимизатор прочухивает априорное условие и WERE на мозги практически не давит
5)Не теряем возможности править источник из конструктора

но чел судя по всему про MDB спрашивал.
"p_id_otdel - параметр." (я тут @ не наблюдаю)
...
Рейтинг: 0 / 0
Процедура с параметром.
    #32326787
Фотография Pavel
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Прошу прощения, про перекомпиляцию я прогнал - перепутал с использованием временной таблицы.
...
Рейтинг: 0 / 0
13 сообщений из 13, страница 1 из 1
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Процедура с параметром.
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]