powered by simpleCommunicator - 2.0.49     © 2025 Programmizd 02
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Как эффективно использовать хр. процедуру, возвращающую табличные данные?
25 сообщений из 57, страница 2 из 3
Как эффективно использовать хр. процедуру, возвращающую табличные данные?
    #38818601
Alex_Toms
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
iapА почему не для сотни табличных переменных?

У него в запросе одна временная таблица #tblHeader,
посему достаточно одной переменной, я бы и название оставил @tblHeader...

Код: sql
1.
2.
3.
4.
5.
DECLARE @tblHeader (...)

Insert into @tblHeader
SELECT * FROM myFunc
...............
...
Рейтинг: 0 / 0
Как эффективно использовать хр. процедуру, возвращающую табличные данные?
    #38818604
iap
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alex_TomsУ него в запросе одна временная таблица #tblHeaderА должно быть ни одной!
Почему нельзя написать SELECT сразу из MyFunc(), я вот не пойму никак!
...
Рейтинг: 0 / 0
Как эффективно использовать хр. процедуру, возвращающую табличные данные?
    #38818608
Фотография Shakill
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
iapAlex_TomsУ него в запросе одна временная таблица #tblHeaderА должно быть ни одной!
Почему нельзя написать SELECT сразу из MyFunc(), я вот не пойму никак!
можно предположить, что MyFunc адски тяжелая и человек не хочет обращаться к ней два раза
...
Рейтинг: 0 / 0
Как эффективно использовать хр. процедуру, возвращающую табличные данные?
    #38818611
user7777
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
iapAlex_TomsУ него в запросе одна временная таблица #tblHeaderА должно быть ни одной!
Почему нельзя написать SELECT сразу из MyFunc(), я вот не пойму никак!

потому что результат этого селекта, используется три раза в запросе ниже, и как переделать этот запрос я не знаю
...
Рейтинг: 0 / 0
Как эффективно использовать хр. процедуру, возвращающую табличные данные?
    #38818613
user7777
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Shakilliapпропущено...
А должно быть ни одной!
Почему нельзя написать SELECT сразу из MyFunc(), я вот не пойму никак!
можно предположить, что MyFunc адски тяжелая и человек не хочет обращаться к ней два раза

все верно)
...
Рейтинг: 0 / 0
Как эффективно использовать хр. процедуру, возвращающую табличные данные?
    #38818617
Glory
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
user7777все верно)
Верно что ?
Что написана тяжелая табличная функция ?
Которую теперь надо приткнуть в чудовищно написанный запрос ?
...
Рейтинг: 0 / 0
Как эффективно использовать хр. процедуру, возвращающую табличные данные?
    #38818621
Alex_Toms
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
При замене #tblHeader на SELECT из MyFunc(), сколько раз выполнится MyFunc()?
Если MyFunc() не тормозная, то ваш вариант подойдёт, но как мне кажется тормоза всё же есть.
...
Рейтинг: 0 / 0
Как эффективно использовать хр. процедуру, возвращающую табличные данные?
    #38818623
iap
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
user7777iapпропущено...
А должно быть ни одной!
Почему нельзя написать SELECT сразу из MyFunc(), я вот не пойму никак!

потому что результат этого селекта, используется три раза в запросе ниже, и как переделать этот запрос я не знаюА почему три раза, а не один?
...
Рейтинг: 0 / 0
Как эффективно использовать хр. процедуру, возвращающую табличные данные?
    #38818625
Alex_Toms
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну вот, пока отвечал, мысль уже дали...
...
Рейтинг: 0 / 0
Как эффективно использовать хр. процедуру, возвращающую табличные данные?
    #38818627
iap
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
iapuser7777пропущено...


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

OUTER APPLY -надо погуглить
...
Рейтинг: 0 / 0
Как эффективно использовать хр. процедуру, возвращающую табличные данные?
    #38818676
Wlr-l
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
user7777тоесть вот так:



Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
Insert into #tblHeader
SELECT * FROM myFunc


select * from
#tblHeader left join
(
SELECT id, field, id2
FROM 
(SELECT tblDetail1.id, tblDetail1.field, #tblHeader.id2
FROM
#tblHeader inner join tblDetail1 on #tblHeader.id = tblDetail1.id
Group by tblDetail1.id, tblDetail1.field, #tblHeader.id2
 
union all
SELECT tblDetail2.id, tblDetail2.field, #tblHeader.id2
FROM
#tblHeader inner join tblDetail2 on #tblHeader.id =tblDetail2.id
Group by tblDetail2.id, tblDetail2.field, #tblHeader.id2
) AS q1
GRUP by  id, field, id2) as q2
On #tblHeader.id2 = q2.id2 



Во внутренних и внешнем запросах используется группировка без агрегирующей функции. Это удаление дубликатов?
...
Рейтинг: 0 / 0
Как эффективно использовать хр. процедуру, возвращающую табличные данные?
    #38818710
user7777
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Wlr-luser7777тоесть вот так:



Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
Insert into #tblHeader
SELECT * FROM myFunc


select * 
from
#tblHeader left join
(
SELECT id, field, id2
FROM 
(SELECT tblDetail1.id, tblDetail1.field, #tblHeader.id2
FROM
#tblHeader inner join tblDetail1 on #tblHeader.id = tblDetail1.id
Group by tblDetail1.id, tblDetail1.field, #tblHeader.id2
 
union all
SELECT tblDetail2.id, tblDetail2.field, #tblHeader.id2
FROM
#tblHeader inner join tblDetail2 on #tblHeader.id =tblDetail2.id
Group by tblDetail2.id, tblDetail2.field, #tblHeader.id2
) AS q1
GRUP by  id, field, id2) as q2
On #tblHeader.id2 = q2.id2 



Во внутренних и внешнем запросах используется группировка без агрегирующей функции. Это удаление дубликатов?

прошу прощения, неправильно написал пример, сори

вот как-то так

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
Insert into #tblHeader
SELECT * FROM myFunc


select #tblHeader.fielNew1, #tblHeader.fielNew2,  q2.id, q2.id2,  q2.field, q2.qnt1,  q2.qnt2,  (Case When ISNUll(q2.id2,0)=0 then 0 else q2.qnt2 - q2.qnt1) as qnt3
from

#tblHeader left join
(
SELECT id, field, id2, Sum(qnt1) as qnt1,  Sum(qnt2) as qnt2
FROM 

(
SELECT tblDetail1.id, #tblHeader.id2, tblDetail1.field,  tblDetail1.qnt as qnt1, 0 as qnt2
FROM
#tblHeader inner join tblDetail1 on #tblHeader.id = tblDetail1.id 

union all

SELECT #tblHeader.id, tblDetail2.id2,  tblDetail2.field, 0 as qnt1, tblDetail2.qnt as qnt2
FROM
#tblHeader inner join tblDetail2 on #tblHeader.2id =tblDetail2.2id
) AS q1

GROUP BY  id,  id2, field
) as q2

On #tblHeader.id = q2.id
...
Рейтинг: 0 / 0
Как эффективно использовать хр. процедуру, возвращающую табличные данные?
    #38818862
Glory
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
user7777прошу прощения, неправильно написал пример, сори

вот как-то так
Вы что реально не видите, что вы делаете
#tblHeader left join ... #tblHeader inner ... left join ... #tblHeader inner
...
Рейтинг: 0 / 0
Как эффективно использовать хр. процедуру, возвращающую табличные данные?
    #38818876
Фотография Mind
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alex_Toms1. Поиск в интернете "mssql табличные переменные индексы" даёт массу ссылок, в том числе и на наш форум.
2. Где использовал, там скорость возрастала. Есть ограничение, индексы могу быть ТОЛЬКО уникальные, хотя их можно приспособить и на поля с не уникальными значениями.Основная проблема табличных переменных, это не индексы, а отсутствие статистик.
...
Рейтинг: 0 / 0
Как эффективно использовать хр. процедуру, возвращающую табличные данные?
    #38818978
LexusR
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
чото мне кажется всё это сворачивается в
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
select fielNew1, fielNew2id, id2, field
,SUM(isnull(d1.qnt,0)) as qnt1
,SUM(isnull(d1.qnt,0)) as qnt2
,SUM(case when id2 is null then 0 else isnull(d2.qnt,0) - isnull(d1.qnt,0) end as qnt3
from #tblHeader h
left join tblDetail1 d1 on h.id  = d1.id 
left join tblDetail2 d2 on h.id2 = d2.id 
group by fielNew1, fielNew2, id, id2, field
...
Рейтинг: 0 / 0
Как эффективно использовать хр. процедуру, возвращающую табличные данные?
    #38819017
iap
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LexusRчото мне кажется всё это сворачивается в
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
select fielNew1, fielNew2id, id2, field
,SUM(isnull(d1.qnt,0)) as qnt1
,SUM(isnull(d1.qnt,0)) as qnt2
,SUM(case when id2 is null then 0 else isnull(d2.qnt,0) - isnull(d1.qnt,0) end as qnt3
from #tblHeader h
left join tblDetail1 d1 on h.id  = d1.id 
left join tblDetail2 d2 on h.id2 = d2.id 
group by fielNew1, fielNew2, id, id2, field

Нет. Потому что два LEFT JOINа. Сумма задвоится (затроится и т.п.).
Но можно аггрегировать в подзапросах, а потом LEFT JOIN (OUTER APPLY)
Кстати, у Вас получилось одно и то же выражение для qnt1 и qnt2
...
Рейтинг: 0 / 0
Как эффективно использовать хр. процедуру, возвращающую табличные данные?
    #38819118
user7777
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
LexusRчото мне кажется всё это сворачивается в
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
select fielNew1, fielNew2id, id2, field
,SUM(isnull(d1.qnt,0)) as qnt1
,SUM(isnull(d1.qnt,0)) as qnt2
,SUM(case when id2 is null then 0 else isnull(d2.qnt,0) - isnull(d1.qnt,0) end as qnt3
from #tblHeader h
left join tblDetail1 d1 on h.id  = d1.id 
left join tblDetail2 d2 on h.id2 = d2.id 
group by fielNew1, fielNew2, id, id2, field



нет, потому что еще связь по полю field, при этом нужно выводить еще те записи из tblDetail2, в которых есть совпадение по полю id2 с #tblHeader, но нет по полю field с tblDetail1......
я уже нашел у себя ошибку в логике , буду переписывать с full join....
...
Рейтинг: 0 / 0
Как эффективно использовать хр. процедуру, возвращающую табличные данные?
    #38819122
user7777
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Gloryuser7777прошу прощения, неправильно написал пример, сори

вот как-то так
Вы что реально не видите, что вы делаете
#tblHeader left join ... #tblHeader inner ... left join ... #tblHeader inner


вы реально ничего реального не предложили
...
Рейтинг: 0 / 0
Как эффективно использовать хр. процедуру, возвращающую табличные данные?
    #38819127
Glory
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
user7777вы реально ничего реального не предложили
Нравяться мне такие наезды.
Я написал хреновый код. Я вам его не покажу (во всяком случае целиком), про решаемую задачу тоже ничего не расскажу. А вы должны(!) предложить мне реальные(!) способы решения.
...
Рейтинг: 0 / 0
Как эффективно использовать хр. процедуру, возвращающую табличные данные?
    #38819160
user7777
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Gloryuser7777вы реально ничего реального не предложили
Нравяться мне такие наезды.
Я написал хреновый код. Я вам его не покажу (во всяком случае целиком), про решаемую задачу тоже ничего не расскажу. А вы должны(!) предложить мне реальные(!) способы решения.


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

Нравяться мне такие наезды.
Я написал хреновый код. Я вам его не покажу (во всяком случае целиком), про решаемую задачу тоже ничего не расскажу. А вы должны(!) предложить мне реальные(!) способы решения.


я не говорю что вы что-то должны, я говорю что вы пишите бесполезные комменты

и для того чтоб утверждать что метод хреновый, надо показать лучший
...
Рейтинг: 0 / 0
Как эффективно использовать хр. процедуру, возвращающую табличные данные?
    #38819163
Glory
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
user7777я не говорю что вы что-то должны, я говорю что вы пишите бесполезные комменты
Мои комментарии соответствуют уровню ваших вопросов.
Из двух плохих запросов нельзя получить один хороший.
...
Рейтинг: 0 / 0
Как эффективно использовать хр. процедуру, возвращающую табличные данные?
    #38819174
user7777
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Gloryuser7777я не говорю что вы что-то должны, я говорю что вы пишите бесполезные комменты
Мои комментарии соответствуют уровню ваших вопросов.
Из двух плохих запросов нельзя получить один хороший.

Ваши комментарии соответствуют уровню " мне нечего делать .... надо кого-то потроллить"
...
Рейтинг: 0 / 0
Как эффективно использовать хр. процедуру, возвращающую табличные данные?
    #38819183
Glory
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
user7777Ваши комментарии соответствуют уровню " мне нечего делать .... надо кого-то потроллить"
Вы слишком большого мнения о себе и вашей роли в этом мире.
Вы уже сутки пытаетесь из дерьма сделать конфетку с помощью переписывания одной обертки на другую.
...
Рейтинг: 0 / 0
25 сообщений из 57, страница 2 из 3
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Как эффективно использовать хр. процедуру, возвращающую табличные данные?
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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