powered by simpleCommunicator - 2.0.49     © 2025 Programmizd 02
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Как быть с табличной функцией?
20 сообщений из 20, страница 1 из 1
Как быть с табличной функцией?
    #38473897
Draginsv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Создаю табличную функцию с параметрами в sql2012
в начале идет описание структуры возвращаемой таблицы
далее создаю временную таблице
добавляю в нее записи запросом
редактирую эти записи запросом
добавляю в финальную таблицу записи из временной запросом с добавлением данных по полям из других таблиц

в отдельном соединении выполняю запрос из этой функции с параметрами (выполняется долго)

в отдельном окне копирую скрипт этой функции без описания финальной таблицы
вызываю просто селект, с помощью которого заполняется финальная таблица в функции (выполняется мгновенно)

пробовал написать в функции так

DECLARE @TZ TABLE ...
...
INSERT INTO @TZ ...
UPDATE @TZ SET ...
...
RETURNS TABLE
AS
RETURN (...)

не пропускает

а в штатном синтаксисе так

AS
RETURNS @tReport TABLE (...)
....
....
INSERT INTO @tReport ....
...
RETURN

Как можно извратиться без финальной таблицы в функции, но при этом оперировать в временными таблицами?
Или такой возможности нет?
...
Рейтинг: 0 / 0
Как быть с табличной функцией?
    #38473901
aleks2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Хто понял (способен отфильтровать) этот мутный поток сознания?
...
Рейтинг: 0 / 0
Как быть с табличной функцией?
    #38473907
Draginsv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Что не понятно объяснил?
...
Рейтинг: 0 / 0
Как быть с табличной функцией?
    #38473917
Фотография free_walker
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Что Вы пытаетесь сделать вот этим:


Код: sql
1.
2.
3.
RETURNS TABLE
AS
RETURN (...)



??
...
Рейтинг: 0 / 0
Как быть с табличной функцией?
    #38473927
aleks2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DraginsvЧто не понятно объяснил?
Ты нипаверишь - ваще ничего. Сходи на курсы "внятного объяснения" чтоле?

Т.е. я, канешно, могу пованговать и сообразить, что ты испытываешь иллюзию, что эти две декларации

DECLARE @TZ TABLE ...
и
AS
RETURNS @tReport TABLE (...)

различаются.
Я тя огорчу - оне одинаковые таблицы создают.
...
Рейтинг: 0 / 0
Как быть с табличной функцией?
    #38473929
Draginsv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Проблема следующая
я не могу возврат табличной функции описать одним запросом без манипуляций с временными таблицами

при возврате результата табличной функции через описанную в начале таблицу с последующим ее заполнением - тормоза

просто вызов тупого селекта из временной таблицы с жоинами - мгновенно

как можно описать табличную функцию с временными таблицами и манипуляциями с ними но без финальной таблицы?
...
Рейтинг: 0 / 0
Как быть с табличной функцией?
    #38473935
aleks2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Чукча не читатель.
...
Рейтинг: 0 / 0
Как быть с табличной функцией?
    #38473945
Draginsv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
грубо говоря так

ALTER FUNCTION fff ()
(
@io int,
@d1 datetime
)
RETURNS TABLE
AS RETURN (select * from @TZ inner join ... )

куда здесь можно вставить?
DECLARE @TZ TABLE ...
...
INSERT INTO @TZ ...
UPDATE @TZ SET ...
...
...
Рейтинг: 0 / 0
Как быть с табличной функцией?
    #38473958
invm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Draginsv,

Вы зациклились на вставке в табличную переменную, хотя причина "тормозов" может быть совсем не в этом.
Хотите помощи - показывайте текст вашей функции полностью.
...
Рейтинг: 0 / 0
Как быть с табличной функцией?
    #38473959
Draginsv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
вот так

AS
RETURNS @tReport TABLE (...)
....
DECLARE @TZ TABLE ...
...
INSERT INTO @TZ ...
UPDATE @TZ SET ...
...
....
INSERT INTO @tReport (...)
select * from @TZ inner join ...
...

RETURN

очень медленно (6 минут)
...
Рейтинг: 0 / 0
Как быть с табличной функцией?
    #38473964
aleks2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Draginsvгрубо говоря так

ALTER FUNCTION fff ()
(
@io int,
@d1 datetime
)
RETURNS TABLE
AS RETURN (select * from @TZ inner join ... )

куда здесь можно вставить?
DECLARE @TZ TABLE ...
...
INSERT INTO @TZ ...
UPDATE @TZ SET ...
...

Еще раз для непонятливых чукчей: НИЗЗЯ.
...
Рейтинг: 0 / 0
Как быть с табличной функцией?
    #38473973
Draginsv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
в отдельном окне студио
это выполняется мгновенно

DECLARE
@io int,
@d1 datetime

DECLARE @TZ TABLE ...
...
INSERT INTO @TZ ...
UPDATE @TZ SET ...
...

select * from @TZ inner join ...

вывод :

INSERT INTO @tReport (...)
select * from @TZ inner join ...

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

а зачем вообще вам этот промежуточный набор @TZ, может стоит попробовать вместо многострочной функции написать инлайн?
...
Рейтинг: 0 / 0
Как быть с табличной функцией?
    #38474000
Jaffar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shakill,

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

3.Если план выполнения для вас китайская грамота - попробуйте поиграть с option(force order, recompile и т.п.).
...
Рейтинг: 0 / 0
Как быть с табличной функцией?
    #38474002
Draginsv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
не получается инлайн
от параметра @IO зависит что вливать в @TZ
и апдейтить приходится.
Да можно конечно все привести к селекту, тогда это все обрастет снежным комом.

но почему зараза тормозит?
дисковые операции с tempdb протекают медленно на сервере ?
не знаю.

Итог
значит вставку в инлайне сделать нельзя, только цельной селект.
или мультилайн.

Спасибо всем!
...
Рейтинг: 0 / 0
Как быть с табличной функцией?
    #38474015
Фотография Shakill
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Draginsvне получается инлайн
от параметра @IO зависит что вливать в @TZ
и апдейтить приходится.
Да можно конечно все привести к селекту, тогда это все обрастет снежным комом.
можно в том же единственном запросе сделать выборку, зависящую от @IO и оформить это как cte для наглядности
апдейт заменить на вычисление
все-таки, стоит попробовать инлайн
...
Рейтинг: 0 / 0
Как быть с табличной функцией?
    #38474050
Draginsv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
JaffarShakill,

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

3.Если план выполнения для вас китайская грамота - попробуйте поиграть с option(force order, recompile и т.п.).

сам запрос - мгновено
...
Рейтинг: 0 / 0
Как быть с табличной функцией?
    #38474324
Draginsv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вообще этот вопрос не случайный, какой то затык.

скрипт по созданию, заполнению временной таблицы, а потом селекта из нее происходит мгновенно.
как только это засунуть в мультилайн фунцию а из функции сделать селект - все висит.
дурдом какой то.
...
Рейтинг: 0 / 0
Как быть с табличной функцией?
    #38474447
Draginsv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вопрос с функцией закрыт. разобрался. дырка в эксперименте с запросом. индекс добавил и функция заработала. Извиняюсь.
...
Рейтинг: 0 / 0
Как быть с табличной функцией?
    #38475109
aleks2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shakillможно в том же единственном запросе сделать выборку, зависящую от @IO и оформить это как cte для наглядности
апдейт заменить на вычисление
все-таки, стоит попробовать инлайн

Хе-хе?! Это абсолютно бесполезно, для существа, верующего в чудеса и с отсутствующим мозгом.
...
Рейтинг: 0 / 0
20 сообщений из 20, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Как быть с табличной функцией?
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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