powered by simpleCommunicator - 2.0.50     © 2025 Programmizd 02
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Фиксирование результатов в таблицу в функции
9 сообщений из 9, страница 1 из 1
Фиксирование результатов в таблицу в функции
    #40099028
Tketano
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день.

Просьба помочь с архитектурой решения. Сейчас все сводится к тому, что функция должна зафиксировать данные в таблице, что очевидно невозможно.

Есть таблица A (сущности) и таблица B (расчетные данные для каждой записи таблицы A, один ко многим). Расчет данных для таблицы B (для каждой записи A) может выполняться достаточно долго. Сейчас при изменении данных таблицы A (или связанных с ней таблиц) с помощью триггеров удаляются все расчеты в таблице B, данные на лету не обновляются (ввиду длительности операции). А расчет выполняется непосредственно, когда пользователь выбирает для работы группу записей A. И тут возникает проблема как зафиксировать только что рассчитанные данные в таблице B?

Например, запрос вида:
Код: sql
1.
SELECT * FROM A INNER JOIN B ON ... WHERE ... много условий ...


Это могла бы быть функция GetB (PrimaryKey A), которая либо вытягивает данные, либо фиксирует и вытягивает, но, понятно, что записать данные в функции в таблицу B не получится. Альтернатива использовать ХП для расчета значений B перед селектом, но придется ей на вход дублировать все условия WHERE, либо выполнять расчет по всей базе. В любом случае не очень красивое решение.

Всем хорошего дня)
...
Рейтинг: 0 / 0
Фиксирование результатов в таблицу в функции
    #40099058
aleks222
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Что-то мутно излагаете.

Используйте функцию в процедуре.
...
Рейтинг: 0 / 0
Фиксирование результатов в таблицу в функции
    #40099087
Tketano
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
aleks222,

Вкратце: данные необходимо получать в конструкции SELECT, а при их отсутствии предварительно вычислять.

Если завернуть функцию в процедуру, то решается проблема с записью в таблицу, но невозможно получить данные в одном SELECT. Получим код вида
Код: sql
1.
EXEC ... ; SELECT ...


А в идеале такой вариант:

Код: sql
1.
SELECT A.*, GetB(A.PrimaryKey) FROM A 

,
где функция GetB либо выбирает данные, либо рассчитывает, записывает и выбирает.
...
Рейтинг: 0 / 0
Фиксирование результатов в таблицу в функции
    #40099095
uaggster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Tketano

где функция GetB либо выбирает данные, либо рассчитывает, записывает и выбирает.

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

попробуйте пересчитывать В только для изменённых строк в таблице А.
...
Рейтинг: 0 / 0
Фиксирование результатов в таблицу в функции
    #40099100
Владислав Колосов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
uaggster,

использовать процедуру не слишком удобно для динамических запросов со стороны пользователя, об этом автор пишет. Для этого надо "проталкивать" предикаты в процедуру.
...
Рейтинг: 0 / 0
Фиксирование результатов в таблицу в функции
    #40099101
Tketano
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
uaggster,

Как я перехвачу эти данные из ХП в вышестоящем SELECT? Эти данные пролетят мимо как выходной набор данных. Мне эти данные необходимо сджоинить с сущностями и продолжить логику на сервере.
...
Рейтинг: 0 / 0
Фиксирование результатов в таблицу в функции
    #40099103
uaggster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ну... Exec into сделать, в темповую.
...
Рейтинг: 0 / 0
Фиксирование результатов в таблицу в функции
    #40099104
Tketano
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Владислав Колосов,

Тогда получается предварительный обсчет всей базы. Т.е. вначале вычисляем все недостающие данные в таблице B, а затем выполняем SELECT ...
Да, это решение держу в уме.
...
Рейтинг: 0 / 0
9 сообщений из 9, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Фиксирование результатов в таблицу в функции
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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