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

Написал процедуру, которая возвращает табличные данные. то-есть в процедуре есть
Код: sql
1.
Select * from ***

. Хочу этот результат использовать в другом запросе/процедуре. Так вот если написать просто
Код: sql
1.
exec myproc

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

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

табличная инлайн функция!

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

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

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

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

нет, )) вот это уже интересно,.. что реально ускоряет?... ссылку дадите??Лучше покажите процедуру.
Сдаётся мне, не нужна там временная таблица.
...
Рейтинг: 0 / 0
Как эффективно использовать хр. процедуру, возвращающую табличные данные?
    #38818526
Alex_Toms
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
1. Поиск в интернете "mssql табличные переменные индексы" даёт массу ссылок, в том числе и на наш форум.
2. Где использовал, там скорость возрастала. Есть ограничение, индексы могу быть ТОЛЬКО уникальные, хотя их можно приспособить и на поля с не уникальными значениями.

Пример: поле PARENT уникально, а R_COMP не уникально, создаю дополнительное поле с уникальными значениями.
DECLARE @P TABLE (ID INT IDENTITY (1,1), R_COMP [int], [PARENT] [int], [CHILD] [int], VOL DECIMAL(7,2), unique(R_COMP,ID), unique(PARENT))
...
Рейтинг: 0 / 0
Как эффективно использовать хр. процедуру, возвращающую табличные данные?
    #38818531
user7777
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
iapuser7777пропущено...


нет, )) вот это уже интересно,.. что реально ускоряет?... ссылку дадите??Лучше покажите процедуру.
Сдаётся мне, не нужна там временная таблица.


приведу пример, возможно и не нужна



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


select * from
#tblHeader left join
( 
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 q 
On #tblHeader.id2 = q.id2 
...
Рейтинг: 0 / 0
Как эффективно использовать хр. процедуру, возвращающую табличные данные?
    #38818533
iap
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alex_Toms1. Поиск в интернете "mssql табличные переменные индексы" даёт массу ссылок, в том числе и на наш форум.
2. Где использовал, там скорость возрастала. Есть ограничение, индексы могу быть ТОЛЬКО уникальные, хотя их можно приспособить и на поля с не уникальными значениями.

Пример: поле PARENT уникально, а R_COMP не уникально, создаю дополнительное поле с уникальными значениями.
DECLARE @P TABLE (ID INT IDENTITY (1,1), R_COMP [int], [PARENT] [int], [CHILD] [int], VOL DECIMAL(7,2), unique(R_COMP,ID), unique(PARENT))Это зачем так? Почему не просто UNIQUE(R_COMP,PARENT)?
...
Рейтинг: 0 / 0
Как эффективно использовать хр. процедуру, возвращающую табличные данные?
    #38818534
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
Как эффективно использовать хр. процедуру, возвращающую табличные данные?
    #38818536
user7777
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Alex_Toms1. Поиск в интернете "mssql табличные переменные индексы" даёт массу ссылок, в том числе и на наш форум.
2. Где использовал, там скорость возрастала. Есть ограничение, индексы могу быть ТОЛЬКО уникальные, хотя их можно приспособить и на поля с не уникальными значениями.

Пример: поле PARENT уникально, а R_COMP не уникально, создаю дополнительное поле с уникальными значениями.
DECLARE @P TABLE (ID INT IDENTITY (1,1), R_COMP [int], [PARENT] [int], [CHILD] [int], VOL DECIMAL(7,2), unique(R_COMP,ID), unique(PARENT))


спасибо попробую
...
Рейтинг: 0 / 0
Как эффективно использовать хр. процедуру, возвращающую табличные данные?
    #38818538
iap
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
user7777Alex_Toms1. Поиск в интернете "mssql табличные переменные индексы" даёт массу ссылок, в том числе и на наш форум.
2. Где использовал, там скорость возрастала. Есть ограничение, индексы могу быть ТОЛЬКО уникальные, хотя их можно приспособить и на поля с не уникальными значениями.

Пример: поле PARENT уникально, а R_COMP не уникально, создаю дополнительное поле с уникальными значениями.
DECLARE @P TABLE (ID INT IDENTITY (1,1), R_COMP [int], [PARENT] [int], [CHILD] [int], VOL DECIMAL(7,2), unique(R_COMP,ID), unique(PARENT))


спасибо попробуюЛучше попробуйте написать нормальный SELECT (один!!!).
Кстати, что такое myFunc?
Если функция, то почему без скобок?
...
Рейтинг: 0 / 0
Как эффективно использовать хр. процедуру, возвращающую табличные данные?
    #38818544
Alex_Toms
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Хотел дать один пример для двух ситуаций одной строкой, поправлюсь, даю две строки.

поле PARENT уникально.
DECLARE @P TABLE (R_COMP [int], [PARENT] [int], [CHILD] [int], VOL DECIMAL(7,2), unique(PARENT))

поле R_COMP не уникально, создаю дополнительное поле ID с уникальными значениями.
DECLARE @P TABLE (ID INT IDENTITY (1,1), R_COMP [int], [PARENT] [int], [CHILD] [int], VOL DECIMAL(7,2), unique(R_COMP,ID))
...
Рейтинг: 0 / 0
Как эффективно использовать хр. процедуру, возвращающую табличные данные?
    #38818545
user7777
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
iapКстати, что такое myFunc?
Если функция, то почему без скобок?

myFunc -функция (спешил скобки не добавил,)

iapЛучше попробуйте написать нормальный SELECT (один!!!). - пока не знаю как
...
Рейтинг: 0 / 0
Как эффективно использовать хр. процедуру, возвращающую табличные данные?
    #38818549
user7777
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
user7777
iapЛучше попробуйте написать нормальный SELECT (один!!!). - пока не знаю как
скажите как добиться того же результата одним селектом?
...
Рейтинг: 0 / 0
Как эффективно использовать хр. процедуру, возвращающую табличные данные?
    #38818559
Alex_Toms
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Даже если будет найден вариант с одним селектом тормоза всё же останутся.
Тормоза от inner join с табличной переменной.
Попробуйте вариант с индексами, интересно на сколько изменится скорость?
...
Рейтинг: 0 / 0
Как эффективно использовать хр. процедуру, возвращающую табличные данные?
    #38818581
Glory
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
user7777приведу пример, возможно и не нужна



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


select * from
#tblHeader left join
( 
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 q 
On #tblHeader.id2 = q.id2 


Ваш запрос - очень странный
#tblHeader по сути соединяется сама с собой зачем то
...
Рейтинг: 0 / 0
Как эффективно использовать хр. процедуру, возвращающую табличные данные?
    #38818584
Alex_Toms
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не факт, данные в #tblHeader и tblHeader скорее всего разные...
...
Рейтинг: 0 / 0
Как эффективно использовать хр. процедуру, возвращающую табличные данные?
    #38818585
iap
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alex_TomsДаже если будет найден вариант с одним селектом тормоза всё же останутся.
Тормоза от inner join с табличной переменной.
Попробуйте вариант с индексами, интересно на сколько изменится скорость?Какой переменной??!
Зачем переменная??!

Один SELECT вон он - уже есть!
Его просто надо написать по-человечесчки!

Кстати, интересно, а зачем MyFunc()? Какого она типа?
Вызов этой функции в принципе может тормозить по-страшному.
...
Рейтинг: 0 / 0
Как эффективно использовать хр. процедуру, возвращающую табличные данные?
    #38818593
Alex_Toms
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
iapКакой переменной??!
Зачем переменная??!

Мой ответ для варианта с табличной переменной вместо временной таблицы...
...
Рейтинг: 0 / 0
Как эффективно использовать хр. процедуру, возвращающую табличные данные?
    #38818594
iap
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alex_TomsiapКакой переменной??!
Зачем переменная??!

Мой ответ для варианта с табличной переменной вместо временной таблицы...А почему не для сотни табличных переменных?
...
Рейтинг: 0 / 0
Как эффективно использовать хр. процедуру, возвращающую табличные данные?
    #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
Как эффективно использовать хр. процедуру, возвращающую табличные данные?
    #38819418
user7777
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Gloryuser7777Ваши комментарии соответствуют уровню " мне нечего делать .... надо кого-то потроллить"
Вы слишком большого мнения о себе и вашей роли в этом мире.
Вы уже сутки пытаетесь из дерьма сделать конфетку с помощью переписывания одной обертки на другую.

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

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

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

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

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

user7777Вы конечно можете язвить..но это очень по-жлобски...
Разумеется. По блогородному это молчать или жаловаться, ой я это не могу поменять, ой а это я не знаю как поменять, ой придумайте, а как это сделать

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


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


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