|
Как быть с табличной функцией?
|
|||
---|---|---|---|
#18+
Создаю табличную функцию с параметрами в sql2012 в начале идет описание структуры возвращаемой таблицы далее создаю временную таблице добавляю в нее записи запросом редактирую эти записи запросом добавляю в финальную таблицу записи из временной запросом с добавлением данных по полям из других таблиц в отдельном соединении выполняю запрос из этой функции с параметрами (выполняется долго) в отдельном окне копирую скрипт этой функции без описания финальной таблицы вызываю просто селект, с помощью которого заполняется финальная таблица в функции (выполняется мгновенно) пробовал написать в функции так DECLARE @TZ TABLE ... ... INSERT INTO @TZ ... UPDATE @TZ SET ... ... RETURNS TABLE AS RETURN (...) не пропускает а в штатном синтаксисе так AS RETURNS @tReport TABLE (...) .... .... INSERT INTO @tReport .... ... RETURN Как можно извратиться без финальной таблицы в функции, но при этом оперировать в временными таблицами? Или такой возможности нет? ... |
|||
:
Нравится:
Не нравится:
|
|||
22.11.2013, 11:07 |
|
Как быть с табличной функцией?
|
|||
---|---|---|---|
#18+
Хто понял (способен отфильтровать) этот мутный поток сознания? ... |
|||
:
Нравится:
Не нравится:
|
|||
22.11.2013, 11:09 |
|
Как быть с табличной функцией?
|
|||
---|---|---|---|
#18+
Что не понятно объяснил? ... |
|||
:
Нравится:
Не нравится:
|
|||
22.11.2013, 11:13 |
|
Как быть с табличной функцией?
|
|||
---|---|---|---|
#18+
Что Вы пытаетесь сделать вот этим: Код: sql 1. 2. 3.
?? ... |
|||
:
Нравится:
Не нравится:
|
|||
22.11.2013, 11:16 |
|
Как быть с табличной функцией?
|
|||
---|---|---|---|
#18+
DraginsvЧто не понятно объяснил? Ты нипаверишь - ваще ничего. Сходи на курсы "внятного объяснения" чтоле? Т.е. я, канешно, могу пованговать и сообразить, что ты испытываешь иллюзию, что эти две декларации DECLARE @TZ TABLE ... и AS RETURNS @tReport TABLE (...) различаются. Я тя огорчу - оне одинаковые таблицы создают. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.11.2013, 11:21 |
|
Как быть с табличной функцией?
|
|||
---|---|---|---|
#18+
Проблема следующая я не могу возврат табличной функции описать одним запросом без манипуляций с временными таблицами при возврате результата табличной функции через описанную в начале таблицу с последующим ее заполнением - тормоза просто вызов тупого селекта из временной таблицы с жоинами - мгновенно как можно описать табличную функцию с временными таблицами и манипуляциями с ними но без финальной таблицы? ... |
|||
:
Нравится:
Не нравится:
|
|||
22.11.2013, 11:22 |
|
Как быть с табличной функцией?
|
|||
---|---|---|---|
#18+
Чукча не читатель. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.11.2013, 11:24 |
|
Как быть с табличной функцией?
|
|||
---|---|---|---|
#18+
грубо говоря так 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 ... ... ... |
|||
:
Нравится:
Не нравится:
|
|||
22.11.2013, 11:28 |
|
Как быть с табличной функцией?
|
|||
---|---|---|---|
#18+
Draginsv, Вы зациклились на вставке в табличную переменную, хотя причина "тормозов" может быть совсем не в этом. Хотите помощи - показывайте текст вашей функции полностью. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.11.2013, 11:33 |
|
Как быть с табличной функцией?
|
|||
---|---|---|---|
#18+
вот так AS RETURNS @tReport TABLE (...) .... DECLARE @TZ TABLE ... ... INSERT INTO @TZ ... UPDATE @TZ SET ... ... .... INSERT INTO @tReport (...) select * from @TZ inner join ... ... RETURN очень медленно (6 минут) ... |
|||
:
Нравится:
Не нравится:
|
|||
22.11.2013, 11:34 |
|
Как быть с табличной функцией?
|
|||
---|---|---|---|
#18+
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 ... ... Еще раз для непонятливых чукчей: НИЗЗЯ. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.11.2013, 11:35 |
|
Как быть с табличной функцией?
|
|||
---|---|---|---|
#18+
в отдельном окне студио это выполняется мгновенно 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 ... замедляет процесс получения данных ... |
|||
:
Нравится:
Не нравится:
|
|||
22.11.2013, 11:37 |
|
Как быть с табличной функцией?
|
|||
---|---|---|---|
#18+
Draginsv, а зачем вообще вам этот промежуточный набор @TZ, может стоит попробовать вместо многострочной функции написать инлайн? ... |
|||
:
Нравится:
Не нравится:
|
|||
22.11.2013, 11:41 |
|
Как быть с табличной функцией?
|
|||
---|---|---|---|
#18+
Shakill, 1.вам нужно посмотреть план выполнения запроса тогда будет видно где затык. 2.Попробуйте выполнить в отдельном окне все тело функции, включая вставку в финальную таблицу. 3.Если план выполнения для вас китайская грамота - попробуйте поиграть с option(force order, recompile и т.п.). ... |
|||
:
Нравится:
Не нравится:
|
|||
22.11.2013, 11:49 |
|
Как быть с табличной функцией?
|
|||
---|---|---|---|
#18+
не получается инлайн от параметра @IO зависит что вливать в @TZ и апдейтить приходится. Да можно конечно все привести к селекту, тогда это все обрастет снежным комом. но почему зараза тормозит? дисковые операции с tempdb протекают медленно на сервере ? не знаю. Итог значит вставку в инлайне сделать нельзя, только цельной селект. или мультилайн. Спасибо всем! ... |
|||
:
Нравится:
Не нравится:
|
|||
22.11.2013, 11:50 |
|
Как быть с табличной функцией?
|
|||
---|---|---|---|
#18+
Draginsvне получается инлайн от параметра @IO зависит что вливать в @TZ и апдейтить приходится. Да можно конечно все привести к селекту, тогда это все обрастет снежным комом. можно в том же единственном запросе сделать выборку, зависящую от @IO и оформить это как cte для наглядности апдейт заменить на вычисление все-таки, стоит попробовать инлайн ... |
|||
:
Нравится:
Не нравится:
|
|||
22.11.2013, 11:56 |
|
Как быть с табличной функцией?
|
|||
---|---|---|---|
#18+
JaffarShakill, 1.вам нужно посмотреть план выполнения запроса тогда будет видно где затык. 2.Попробуйте выполнить в отдельном окне все тело функции, включая вставку в финальную таблицу. 3.Если план выполнения для вас китайская грамота - попробуйте поиграть с option(force order, recompile и т.п.). сам запрос - мгновено ... |
|||
:
Нравится:
Не нравится:
|
|||
22.11.2013, 12:11 |
|
Как быть с табличной функцией?
|
|||
---|---|---|---|
#18+
Вообще этот вопрос не случайный, какой то затык. скрипт по созданию, заполнению временной таблицы, а потом селекта из нее происходит мгновенно. как только это засунуть в мультилайн фунцию а из функции сделать селект - все висит. дурдом какой то. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.11.2013, 13:53 |
|
Как быть с табличной функцией?
|
|||
---|---|---|---|
#18+
Вопрос с функцией закрыт. разобрался. дырка в эксперименте с запросом. индекс добавил и функция заработала. Извиняюсь. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.11.2013, 14:44 |
|
Как быть с табличной функцией?
|
|||
---|---|---|---|
#18+
Shakillможно в том же единственном запросе сделать выборку, зависящую от @IO и оформить это как cte для наглядности апдейт заменить на вычисление все-таки, стоит попробовать инлайн Хе-хе?! Это абсолютно бесполезно, для существа, верующего в чудеса и с отсутствующим мозгом. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.11.2013, 05:59 |
|
|
start [/forum/topic.php?fid=46&gotonew=1&tid=1704276]: |
0ms |
get settings: |
12ms |
get forum list: |
16ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
43ms |
get topic data: |
14ms |
get first new msg: |
8ms |
get forum data: |
3ms |
get page messages: |
70ms |
get tp. blocked users: |
2ms |
others: | 248ms |
total: | 424ms |
0 / 0 |