Начало » Использование СУБД » Microsoft SQL Server » Запрос + представление или функция, как лучше сделать?* (Задача со звездочкой) (Нужен совет сообщества.)
Запрос + представление или функция, как лучше сделать?* (Задача со звездочкой) [сообщение #2927] |
Mon, 07 August 2023 10:28 |
Sanek
Сообщений: 8 Зарегистрирован: August 2023
|
Junior Member |
|
|
Наткнулся на следующую проблему ...
Дано:
Есть представление, которое очень сложным образом раcсчитывает галочку "можно, нельзя" для каждого объекта.
Есть CTE запрос, который поделен на блоки вроде 1й блок - найти все нужные объекты, 2й - расчитать можно или нет их показывать (обращаясь к представлению) и 3й - вывод.
Что не работает:
представление считает разрешения для всей базы, но на текущий момент появилось такое кол-во записей о правах, что представление тупо зависает, пытаясь это дело обработать.
Моё решение
Появилась мысль из представления сделать функцию и передать в нее параметры , ограничивающие кол-во обрабатываемых записей, тогда функция будет работать. Но проблема в том, что список объектов, для которых надо рассчитать доступ появляется только в 1м блоке запроса.
По этой причине мне как-то надо засунуть результат запроса в параметр функции и все это в CTE )))
Вопроса два:
1. Возможно ли это реализовать (и как)
2. Может есть другой путь?
Пример кода:
Представление (естественно пример для понимания)
Create view Accesses as
Select ObjectId from AccessTable where Allow=1
Запрос:
With SearchQuery AS (
Select ObjectId from Table1 where ...
) , SearchQueryExt (
Select * from SearchQuery
union Select ObjectId from Table2 where ....
union Select ObjectId from Table3 where ....
), FilterQuery (
Select *
fom SearchQueryExt s
join Accesses a on a.ObjectId = s.ObjectId
)
Select *
from TableN s
join FilterQuery f on s.ObjectId = f.ObjectId
Я же хочу сделать функцию что бы было так:
Create function Accesses (ObjctIds ????)
Select ObjectId
from AccessTable
where ObjetId in ObjctIds
and Allow=1
А FilterQuery поменять на что-то вроде :
.
.
.
), FilterQuery (
Select *
fom SearchQueryExt s
join dbo.fAccesses(select ObjectId from SearchQuery) on a.ObjectId = s.ObjectId
)
.
.
.
Есть мысли, как это реализовать ?
|
|
|
|
|
Запрос + представление или функция, как лучше сделать?* (Задача со звездочкой)
От: Sanek - Mon, 07 August 2023 10:28
|
|
|
Re: Запрос + представление или функция, как лучше сделать?* (Задача со звездочкой)
|
|
|
Re: Запрос + представление или функция, как лучше сделать?* (Задача со звездочкой)
От: Sanek - Mon, 07 August 2023 11:06
|
|
|
Re: Запрос + представление или функция, как лучше сделать?* (Задача со звездочкой)
От: МП - Mon, 07 August 2023 11:54
|
|
|
Re: Запрос + представление или функция, как лучше сделать?* (Задача со звездочкой)
От: Sanek - Mon, 07 August 2023 12:31
|
|
|
Re: Запрос + представление или функция, как лучше сделать?* (Задача со звездочкой)
От: МП - Mon, 07 August 2023 12:41
|
|
|
Re: Запрос + представление или функция, как лучше сделать?* (Задача со звездочкой)
От: shigor - Mon, 07 August 2023 13:32
|
|
|
Re: Запрос + представление или функция, как лучше сделать?* (Задача со звездочкой)
От: Sanek - Mon, 07 August 2023 13:54
|
|
|
Re: Запрос + представление или функция, как лучше сделать?* (Задача со звездочкой)
От: shigor - Mon, 07 August 2023 14:57
|
|
|
Re: Запрос + представление или функция, как лучше сделать?* (Задача со звездочкой)
От: Sanek - Mon, 07 August 2023 15:14
|
|
|
Re: Запрос + представление или функция, как лучше сделать?* (Задача со звездочкой)
От: shigor - Mon, 07 August 2023 15:33
|
|
|
Re: Запрос + представление или функция, как лучше сделать?* (Задача со звездочкой)
От: Sanek - Tue, 08 August 2023 08:52
|
|
|
Re: Запрос + представление или функция, как лучше сделать?* (Задача со звездочкой)
От: shigor - Tue, 08 August 2023 12:26
|
|
|
Re: Запрос + представление или функция, как лучше сделать?* (Задача со звездочкой)
От: Sanek - Tue, 08 August 2023 12:33
|
|
|
Re: Запрос + представление или функция, как лучше сделать?* (Задача со звездочкой)
От: shigor - Tue, 08 August 2023 13:31
|
|
|
Re: Запрос + представление или функция, как лучше сделать?* (Задача со звездочкой)
От: Sanek - Tue, 08 August 2023 14:04
|
Переход к форуму:
Текущее время: Wed Dec 18 19:54:26 GMT+3 2024
Общее время, затраченное на создание страницы: 0.00850 секунд
|