Добро пожаловать в форум, Guest >> Войти | Регистрация | Поиск | Правила | | В избранное | Подписаться | ||
Все форумы / Microsoft SQL Server |
![]() ![]() |
Топик располагается на нескольких страницах: [1] 2 вперед Ctrl→ все |
Yagrus2 Member Откуда: Москва Сообщений: 902 |
Всем привет. Есть громоздкая формула, которая использется в десятке скриптов. Есть ли у SQL-сервера функционал позволяющий создать соответствующий объект, который бы вызывался при необходимости и был бы при этом формулой? Скалярная функция не подходит. |
14 сен 15, 17:42 [18147855] Ответить | Цитировать Сообщить модератору |
a_voronin Member Откуда: Москва Сообщений: 4807 |
Тогда поясните, что так такого страшного в этой формуле, что её нельзя реализовать в скалярной функции? |
||
14 сен 15, 17:44 [18147861] Ответить | Цитировать Сообщить модератору |
o-o
Guest |
так сама скалярка страшнее формулы. по времени выполнения |
||||
14 сен 15, 17:47 [18147882] Ответить | Цитировать Сообщить модератору |
Yagrus2 Member Откуда: Москва Сообщений: 902 |
Есть N-таблиц. Одна из них (упрощенно) состоит из столбцов: id_груза, Количество, КоличествоПР, КоличествоЖУ, Объем, ОбъемЖУ, ОбъемПР Для каждого id_груза, именно этими столбцами определяется громоздкая формула. Все остальные N-1 таблицы связаны с ней (один к одному или один ко многим). Обозначим их "ТАБЛИЦЫ". Есть ряд скриптов, которых первая таблица джойнится с несколькими таблицами из списка "ТАБЛИЦЫ". При внесении изменений в формулу, приходится лопатить много скриптов. Если идти по пути скалярной функции (создать скл. ф-цию, с входным параметром [id_груза]) - то на большем объеме данных ничего хорошего не получается.(Даже при связи один к одному) Обсчет происходит очень долго. |
||||
14 сен 15, 18:12 [18148009] Ответить | Цитировать Сообщить модератору |
СТУДЕНТ123
Guest |
|
||||
14 сен 15, 18:27 [18148069] Ответить | Цитировать Сообщить модератору |
Yagrus2 Member Откуда: Москва Сообщений: 902 |
СТУДЕНТ123, Она рассчитывает "корректный" объем |
14 сен 15, 18:30 [18148084] Ответить | Цитировать Сообщить модератору |
СТУДЕНТ123
Guest |
Тогда что именно Вам мешает получать корректные данные (значения) при вводе очередного id_груза, а не проверять его корректность после ввода. Если имеется фактор того, что метрические данные внесенны не корректно (по которым уже произведен расчет), то лучше при минимальной нагрузки на сервер запускайте свою страшную формулу на UPDATE (к примеру когда все спят или на обед ушли), для пересчета корректных значений, но в жизне подобного не видел (обычно это динамичные значения в WMS) |
14 сен 15, 18:40 [18148109] Ответить | Цитировать Сообщить модератору |
alexeyvg Member Откуда: Moscow Сообщений: 31778 |
|
||
14 сен 15, 19:08 [18148211] Ответить | Цитировать Сообщить модератору |
invm Member Откуда: Москва Сообщений: 9633 |
Либо создайте view и используйте его в джойнах вместо таблицы. |
||
14 сен 15, 20:12 [18148420] Ответить | Цитировать Сообщить модератору |
Скалярная фу
Guest |
Yagrus2, как вариант, можно кодогенерацию применять: код подстановки "формул" в теле всего где надо, далее срабатывает генерилка и подставляет раскрытие (полный текст формулы) но пока больше похоже что заранее все это можно вычислить (еще при записи или той же вычисляемой колонкой) если от использующей формулу хранимки результат не меняется, то так и надо сделать. |
14 сен 15, 20:35 [18148509] Ответить | Цитировать Сообщить модератору |
Yuri Abele Member Откуда: Латвия> Литва > Тольятти > Wiesbaden > Karlsruhe Сообщений: 1661 |
INLINE TABLE-VALUE если быть точнее. Иначе всё равно потери в производительности. |
||||
15 сен 15, 09:42 [18149808] Ответить | Цитировать Сообщить модератору |
iap Member Откуда: Москва Сообщений: 47045 |
Так что и так всё понятно. |
||||
15 сен 15, 09:46 [18149823] Ответить | Цитировать Сообщить модератору |
Yagrus2 Member Откуда: Москва Сообщений: 902 |
iap, Что понятно? Остается либо view либо вычислительный столбец делать? |
15 сен 15, 10:19 [18150017] Ответить | Цитировать Сообщить модератору |
iap Member Откуда: Москва Сообщений: 47045 |
Я бы сделал именно функцию. Просто обратил внимание, что выражение "inline - функцию" можно и не уточнять выражением "INLINE TABLE-VALUE". Больше ничего. |
||
15 сен 15, 10:25 [18150066] Ответить | Цитировать Сообщить модератору |
Yagrus2 Member Откуда: Москва Сообщений: 902 |
iap, инлайн функция - это обычная табличная? |
15 сен 15, 10:41 [18150157] Ответить | Цитировать Сообщить модератору |
invm Member Откуда: Москва Сообщений: 9633 |
Если формула статична - делать вычисляемый столбец. Иначе - вью. Инлайновая функция с одним параметром id даст в запросах самосоединение таблицы. Инлайновая функция с кучей параметров, просто инкапсулирующая формулу, при использовании физически аналогична вью или вычисляемому столбцу. Но при изменении количества или порядка параметров опять придется "перелопачивать" все скрипты, где она используется. Что выбрать - дело ваше. |
||
15 сен 15, 10:42 [18150161] Ответить | Цитировать Сообщить модератору |
iap Member Откуда: Москва Сообщений: 47045 |
Здесь все имеют в виду inline. Она же может всегда возвращать одну строку, состоящую из одного поля? |
||
15 сен 15, 10:46 [18150176] Ответить | Цитировать Сообщить модератору |
iap Member Откуда: Москва Сообщений: 47045 |
|
||||
15 сен 15, 10:46 [18150183] Ответить | Цитировать Сообщить модератору |
Yagrus2 Member Откуда: Москва Сообщений: 902 |
Да, может. Те есть создать табличную функцию, которая возвращает один столбец с одним значением. И вызывать эту ф-цию, как обычную скалярную? |
||
15 сен 15, 10:59 [18150238] Ответить | Цитировать Сообщить модератору |
iap Member Откуда: Москва Сообщений: 47045 |
Инлайн-функцию называют ещё "параметрическим представлением". |
||||
15 сен 15, 11:01 [18150243] Ответить | Цитировать Сообщить модератору |
Yuri Abele Member Откуда: Латвия> Литва > Тольятти > Wiesbaden > Karlsruhe Сообщений: 1661 |
Не хочу навяхываться (да не, вру, хочу :-)) вот тут немного |
15 сен 15, 11:44 [18150413] Ответить | Цитировать Сообщить модератору |
Yagrus2 Member Откуда: Москва Сообщений: 902 |
Всем спасибо. Инлайн функция помогла. |
15 сен 15, 11:55 [18150477] Ответить | Цитировать Сообщить модератору |
o-o
Guest |
вы что там хотели сказать-то, что скалярка -- зло или что "и так сойдет"? загадочная фраза "Yes, it is so and the same time not so" абсолютно не раскрыта. а еще у вас смешное Table of contents. сделать бы select distinct, вышло бы наверное 20 тем, а так, наверное, 200. мне аж показалось, дежа вю у меня сплошное, а все проще: вместо 1 темы и к ней 20 тэгов, 200 тем с повторениями, но типа по разным категориям ![]() |
||
15 сен 15, 12:13 [18150582] Ответить | Цитировать Сообщить модератору |
Yuri Abele Member Откуда: Латвия> Литва > Тольятти > Wiesbaden > Karlsruhe Сообщений: 1661 |
А это такая интрига :-)
TOC автоматом генерится. Я готовы add-on взял. Всё руки не дойдут что-то подрехтовать. P.S. дайти ссылку на Ваш блог - так покритиковать хочется |
||||
15 сен 15, 12:41 [18150737] Ответить | Цитировать Сообщить модератору |
o-o
Guest |
а я разве лезу сюда с просьбой мое посетить? ![]() критикуйте сюда вываленное, я за день много тут высказываюсь, в том числе и кодом.
|
|||
15 сен 15, 13:11 [18150898] Ответить | Цитировать Сообщить модератору |
Топик располагается на нескольких страницах: [1] 2 вперед Ctrl→ все |
Все форумы / Microsoft SQL Server | ![]() |