powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / как пооптимальней во view вернуть колонну из SP (или в table: computed column из SP)?
11 сообщений из 11, страница 1 из 1
как пооптимальней во view вернуть колонну из SP (или в table: computed column из SP)?
    #39781678
Фотография vikkiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
как пооптимальней на любой из последних 3х-4х версий SQL Server (в т.ч. 2019 CTP)
во view вернуть колонну из SP (или в table: computed column из SP)?

t-sql udf функцией вызов SP естественно не работает из-за:
'Only functions and some extended stored procedures can be executed from within a function'

SP конечно-же возвращает скаляр, например:
Код: sql
1.
2.
3.
4.
5.
--drop procedure dbo.xx;
create procedure dbo.xx @x int=10 as
begin select datepart(ms,getdate())+@x as x end;
go
exec dbo.xx 1


запросы к таблицам/представлениям динамически генерирует внешнее приложение/UI
над которым нет контроля (генерирующее только select запросы, т.е. нет возможности execute)
поэтому единственный проходящий на ум путь получения фактов - запуск SP на каждую строку
предварительного набора ключей измерений (благо наборы довольно малые: до 1000 строк)

пока единственное что вижу более-менее рабочее:
это писать функцию через assembly (CLR) {пс: уже написал, т.е. через CLR работает} - что будет
на порядок медленнее т.к. эта CLR по доступу к данным, надо вызывать .NET, устанавливать
соединение и т.д, т.е. чего очень не хотелось-бы (т.к. возможно пойдёт в облако
{Azure} а там с этим немного напряг, хотя уже тоже поддерживает).
а Extended Stored Procedure (ESP) уходят в небытиё.

в общем возвращает к сабжу - как в computed column получить результат из SP (scalar) ?
...
Рейтинг: 0 / 0
как пооптимальней во view вернуть колонну из SP (или в table: computed column из SP)?
    #39781709
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vikkivSP конечно-же возвращает скаляр, например:В вашем примере SP вернула не "скаляр", а таблицу, состоящую из одной колонки типа datetime, без имени колонки, при этом в возвращаемой табюлице одна запись.
vikkivили в table: computed column из SPТак нельзя.
vikkivво view вернуть колонну из SP (или в table: computed column из SP)?А вот во view или в computed column вызвать UDF можно

vikkivзапросы к таблицам/представлениям динамически генерирует внешнее приложение/UI
над которым нет контроля (генерирующее только select запросы, т.е. нет возможности execute)
поэтому единственный проходящий на ум путь получения фактов - запуск SP на каждую строку
предварительного набора ключей измерений (благо наборы довольно малые: до 1000 строк)В общем, что то задача пока непонятна.

Приложение умеет только делать запросы к таблицам? Менять вы эти запросы можете?
Тогда делайте запросы.

Запросы фиксированные, и вам нужно изменить их поведение, не меняя сами запросы?
Тогда меняйте таблицы на view, хотя, конечно, так можно изменить что либо совсем чуть чуть.
...
Рейтинг: 0 / 0
как пооптимальней во view вернуть колонну из SP (или в table: computed column из SP)?
    #39781894
Фотография vikkiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alexeyvg
alexeyvg...Менять вы эти запросы можете?
...Запросы фиксированные, и вам нужно изменить их поведение, не меняя сами запросы?..

спасибо,
могу только подменить объекты ( view/table )

может не понятно выражаюсь, попробую ещё раз:

1) приложение генерирует только простые select a,b,c..from..join..where

2) необходимо туда вставлять результат процедуры SP
- например view: ..x.id,dbo.my_foo(x)as y from dbo.x
или table: ..dbo.z (id smallint, y as dbo.my_foo(z))
где my_foo() вызывает SP (что естественно не работает из-за причин в начальном посте)

3) известная (и сейчас работающая) возможность делать это через функцию как-нибудь вызывающую SP
(пока получилось только через CLR.NET, т.е: create assembly .. create function ... )

есть-ли другие варианты получения обычным SQL (но не сложным Т-SQL)
результата SP в select (без батчей, cte, derived, коррелированных, @, # ..)

в крайнем случае если обходных вариантов совсем нет то наверное можно
попробовать добавить немного T-SQL через @ или # таблицы

(предварительно материализовать результаты не представляется возможным
из-за сложности расчётов в SP и высокой динамики контекста)
...
Рейтинг: 0 / 0
как пооптимальней во view вернуть колонну из SP (или в table: computed column из SP)?
    #39781896
Фотография vikkiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вообще странно что MS всё ещё запрещают делать пользовательские
функции на основе пользовательских процедур, могли-бы
давно вынести это на усмотрение DBA запретив по умолчанию.
...
Рейтинг: 0 / 0
как пооптимальней во view вернуть колонну из SP (или в table: computed column из SP)?
    #39781921
WarAnt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vikkiv,

Код: sql
1.
2.
3.
4.
5.
create proc _retdataset
as
select 1 a
GO
select * from OPENROWSET('SQLNCLI', 'Server=localhost;Trusted_Connection=yes;', 'exec _retdataset') AS a;
...
Рейтинг: 0 / 0
как пооптимальней во view вернуть колонну из SP (или в table: computed column из SP)?
    #39781953
Фотография vikkiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
WarAnt,

да, openquery/openrowset тоже вариант но в моём случае нужно на вход SP (и как следствие функции)
возвращающей факт - передать данные (набор ключей измерений) без использования переменных @
(чтобы сгенерировать последний параметр openquery), хотя твой приемлеммый вариант по
производительности наверное близко к CLR.NET SP будет, т.к. тоже нужно открывать соединение.
...
Рейтинг: 0 / 0
как пооптимальней во view вернуть колонну из SP (или в table: computed column из SP)?
    #39781990
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vikkivпроизводительности наверное близко к CLR.NET SP будет, т.к. тоже нужно открывать соединение.для CLR необяззательно открывать соединение, она может работать в том же вызывающем соединении (и в той же транзакции).
vikkiv3) известная (и сейчас работающая) возможность делать это через функцию как-нибудь вызывающую SP
(пока получилось только через CLR.NET, т.е: create assembly .. create function ... )Да, только через CLR.

Вообще самый правильный вариант - не вызывать SP, раз уж архитектура на это не расчитана.
Ну или научить приложение вызывать SP?

Вот странно, вы пишите, что приложение может делать только простые запросы, но потом пишите, что "наверное можно попробовать добавить немного T-SQL через @ или # таблицы"
...
Рейтинг: 0 / 0
как пооптимальней во view вернуть колонну из SP (или в table: computed column из SP)?
    #39782019
Фотография vikkiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alexeyvgНу или научить приложение вызывать SP?
Вот странно, вы пишите, что приложение может делать только простые запросы, но потом пишите, что "наверное можно попробовать добавить немного T-SQL через @ или # таблицы"
эта просто альтернатива которую держать в запасе на всякий случай (давить на изменение клиенского софта) - просто усилия/ресурсы потребуются намного большие (в несколько раз) чем текущее CLR решение
...пойду копать свой C# на предмет максимальной оптимизации

alexeyvgВообще самый правильный вариант - не вызывать SP, раз уж архитектура на это не расчитана.ну как-бы лучшие практики это одно, а бизнес задачи и необходимость их
решения никто пока не отменял, всё-таки IT работает на бизнес а не наоборот
типа частого мнения что бизнес существует для создания зоны комфорта и феншуя в IT

по наблюдениям: у нас админов встающих в позу и не предлагающих работоспособных и
эффективных альтернатив (с чётким раскладом по рискам) - довольно быстро выкидывают.
...
Рейтинг: 0 / 0
как пооптимальней во view вернуть колонну из SP (или в table: computed column из SP)?
    #39782042
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vikkivalexeyvgВообще самый правильный вариант - не вызывать SP, раз уж архитектура на это не расчитана.ну как-бы лучшие практики это одно, а бизнес задачи и необходимость их
решения никто пока не отменял, всё-таки IT работает на бизнес а не наоборот
типа частого мнения что бизнес существует для создания зоны комфорта и феншуя в ITЭэээ, бизнес, сэйлы и бухгалтеры, принимают технические решения??? Говорят "вызывайте SP из вьюх"???
Гениально!
vikkivпо наблюдениям: у нас админов встающих в позу и не предлагающих работоспособных и
эффективных альтернатив (с чётким раскладом по рискам) - довольно быстро выкидывают.Угу, так я и рассказываю расклады по рискам

Эти принимаемые бухгалтерией и сейлами идиотские технические решения будут кривые, ненадёжные, в разы увеличат расходы на ИТ.
Я понимаю, закрытые решения иногда приходится "приоткрывать", править, скреплять и подпирать палками. Но не настолько же??? Что за странное сочетание несочетаемого?

В общем, примерно так, как если бы программисты указывали продажникам как, по их мнению, надо продавать, и бухгалтерам, как начислять налоги. Что то мне подсказывает, что тут уже бизнес "встанет в позу" и пошлёт таких программистьов "на" и "в" :-)

Но сделать можно, да, с учётом этих рисков.
...
Рейтинг: 0 / 0
как пооптимальней во view вернуть колонну из SP (или в table: computed column из SP)?
    #39782060
Владислав Колосов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Бизнесу вообще по барабану, что внутри. Использовать SP_ (XP_) процедуры в бизнес-задачах - это грехи программиста.
...
Рейтинг: 0 / 0
как пооптимальней во view вернуть колонну из SP (или в table: computed column из SP)?
    #39782063
Фотография vikkiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alexeyvg,

понимаю конечно мнение, но по факту с той стороны техническую часть не лезут
- просят решить проблему каждый занимаясь своим делом.
(накладывая некоторые ограничения/приоритеты, в данном случае по возможности
не (из-)меняя софт {обращение к сторонним поставщикам с соответствующим ценником})

проведена оценка выгоды от автоматизации процесса, нужно узнать варианты чего будет стоить решения
выгода > стоимость в разы (если менять софт - то выгода < стоимость)

разработан и оттестирован прототип, архитектура на это рассчитана (CLR, openrowset), риски оценены.

просто думал может местные гуру специализирующиеся в вопросе знают вариант получше - а то вдруг у
меня что забылось (хотя openrowset часто использую - но тут почему-то выскочило как вариант)

так что если альтернатив нет - то вопрос закрыт, всем спасибо.
...
Рейтинг: 0 / 0
11 сообщений из 11, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / как пооптимальней во view вернуть колонну из SP (или в table: computed column из SP)?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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