powered by simpleCommunicator - 2.0.59     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Фильтрация данных с проверкой переменной сессии
8 сообщений из 8, страница 1 из 1
Фильтрация данных с проверкой переменной сессии
    #39883693
Samir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Здравствуйте!


В обычном программировании при использовании оператора OR, условия проверяются поочередно, слева направо.
В запросе ниже даже при VARIABLE1 и N'VARIABLE2 == NULL (а таких переменных может быть несколько, а запрос более сложным) всё работает медленно, скорее всего из-за того, что по плану запроса правая часть всё равно выполняется.
Можно ли заставить SQL работать "правильно" с такими запросами?
Или как эту задачу решить другим способом?
PS: вариант собирать запрос как строку и выполнять ее - не подходит по ряду причин.

Код: sql
1.
2.
3.
4.
5.
SELECT f1, f2, f3
FROM table1 a
WHERE f4 = 123 AND f5 = 456
  AND ((SELECT SESSION_CONTEXT(N'VARIABLE1')) IS NULL  OR   ID IN (SELECT b.ID FROM table2 b)
  AND ((SELECT SESSION_CONTEXT(N'VARIABLE2')) IS NULL  OR   ID IN (SELECT c.ID FROM table3 c)
...
Рейтинг: 0 / 0
Фильтрация данных с проверкой переменной сессии
    #39883708
Владислав Колосов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Samir,

select ... from ... where isnull
union all
select ... from ... where exists ()
...
Рейтинг: 0 / 0
Фильтрация данных с проверкой переменной сессии
    #39883710
TaPaK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Samir,

SESSION_CONTEXT(N'VARIABLE1') в переменные + RECOMPILE тогда выбросит
...
Рейтинг: 0 / 0
Фильтрация данных с проверкой переменной сессии
    #39883711
Samir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Это вьюшка, для фильтрации некоторых полей используются переменные сессии, так как фильтруемые поля невозможно вывести как поля для фильтрации.
...
Рейтинг: 0 / 0
Фильтрация данных с проверкой переменной сессии
    #39883714
Samir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
TaPaK,

Думаете если вместо вьюшки создать функцию с параметрами - будет работать как надо?
...
Рейтинг: 0 / 0
Фильтрация данных с проверкой переменной сессии
    #39883715
TaPaK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SamirTaPaK,

Думаете если вместо вьюшки создать функцию с параметрами - будет работать как надо?
нет
...
Рейтинг: 0 / 0
Фильтрация данных с проверкой переменной сессии
    #39884063
Samir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Получается нет больше вариантов кроме как собирать запрос как строку?

Кстати в запросе выше скобки не там стояли

Код: sql
1.
2.
3.
4.
5.
SELECT f1, f2, f3
FROM table1 a
WHERE f4 = 123 AND f5 = 456
  AND ( SESSION_CONTEXT(N'VARIABLE1') IS NULL  OR   ID IN (SELECT b.ID FROM table2 b) )
  AND ( SESSION_CONTEXT(N'VARIABLE2') IS NULL  OR   ID IN (SELECT c.ID FROM table3 c) )
...
Рейтинг: 0 / 0
Фильтрация данных с проверкой переменной сессии
    #39884070
TaPaK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Samir,

автор, скорее всего из-за того, что по плану запроса правая часть всё равно выполняется.
поставьте SET STATISTICS IO ON и посмотрите, не должно читать что-то из подзапросов. И план актуальный покажите
...
Рейтинг: 0 / 0
8 сообщений из 8, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Фильтрация данных с проверкой переменной сессии
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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