Гость
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / временная таблица из другой хранимке / 14 сообщений из 14, страница 1 из 1
09.03.2021, 09:36
    #40051767
andron81
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
временная таблица из другой хранимке
Добрый всем день.

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

к примеру вот это код не работает. Таблица #BUM_TOTAL "не знакома" после отработки exec . временные таблицы ## мне не подходят так как данные могут подхватить как раз другие сеансы и другие пользователи .

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
ALTER procedure [dbo].[SPK_ZAK_REP_PLAN_WITH_PAPER] (@num numeric(10) )
as
begin

Create table 
create table #BUM_TOTAL (
Mater    varchar(255),
TIP_BUMAGI    varchar(255),
BUM_NAME    varchar(255),
PLOTN_BUMAGI decimal(25,5),
ISH_FORMAT    varchar(255),
WEIGHT decimal(25,5) 
)
insert into #BUM_TOTAL
select * from MY_TABLE wherre NUM=@num

end


go

exec SPK_ZAK_REP_PLAN_WITH_PAPER (555)
select * from #BUM_TOTAL
...
Рейтинг: 0 / 0
09.03.2021, 10:05
    #40051789
Критик
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
временная таблица из другой хранимке
andron81,

У вас же в примере хп не вызывается из другой хп...
...
Рейтинг: 0 / 0
09.03.2021, 10:31
    #40051805
andron81
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
временная таблица из другой хранимке
Критик
andron81,

У вас же в примере хп не вызывается из другой хп...


мне не хранимку надо вызывать из другой хранимки. мне надо делать выборку из временной таблицы созданную в другой хранимаой процедуры и набитой данными там же . переделал и упростил пример :

Код: 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.
29.
30.
31.
32.
33.
34.
alter proc test1
as 
begin
create table #BUM_TOTAL (
Mater    varchar(255),
TIP_BUMAGI    varchar(255),
BUM_NAME    varchar(255),
PLOTN_BUMAGI decimal(25,5),
ISH_FORMAT    varchar(255),
WEIGHT decimal(25,5) 
)

insert into #BUM_TOTAL
 select 
NULL,
'test1',
'rest2',
55,
'90x60',
555
select 'from test1',* from #BUM_TOTAL
end
go

alter proc test2
as 
begin
select 'from test2', * from #BUM_TOTAL
end
go


exec test1
exec test2



from test1 NULLtest1rest 55.00000 90x60 555.00000

сообщение: 208, уровень: 16, состояние: 0, процедура: test2, строка: 5 [строка начала пакета: 30]
Недопустимое имя объекта "#BUM_TOTAL".
...
Рейтинг: 0 / 0
09.03.2021, 10:46
    #40051809
L_argo
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
временная таблица из другой хранимке
Я создаю времянку в действующем сеансе обычным запросом select * into #..... from .... where 1=2
и использую ее в любом месте и в любой ХП.
Есть даже возможность ее пересоздания на случай потери коннекта.

Времянка, созданная в ХП будет видна только внутри этой ХП.
...
Рейтинг: 0 / 0
09.03.2021, 10:56
    #40051813
andron81
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
временная таблица из другой хранимке
L_argo
Я создаю времянку в действующем сеансе обычным запросом select * into #..... from .... where 1=2
и использую ее в любом месте и в любой ХП.
Есть даже возможность ее пересоздания на случай потери коннекта.

Времянка, созданная в ХП будет видна только внутри этой ХП.


мне надо именно в хранимой процедуре.
так необходимо потому, что есть отчет кристал репортс где в футере надо отработать итоговую таблицу из данных составленных из основных данных, делать я это собирался сабрепорторм. вот для чего это
...
Рейтинг: 0 / 0
09.03.2021, 10:59
    #40051816
andron81
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
временная таблица из другой хранимке
L_argo
Я создаю времянку в действующем сеансе обычным запросом select * into #..... from .... where 1=2
и использую ее в любом месте и в любой ХП.
Есть даже возможность ее пересоздания на случай потери коннекта.

Времянка, созданная в ХП будет видна только внутри этой ХП.


я почему-то думал , что это в одном сеансе :

Код: sql
1.
2.
exec test1
exec test2
...
Рейтинг: 0 / 0
09.03.2021, 11:11
    #40051822
DaniilSeryi
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
временная таблица из другой хранимке
А вариант, когда процедура не сохраняет данные во временной таблице, а выводит их, а код после этой процедуры их перенаправляет во временную переменную, Вас не устроит?

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
ALTER procedure [dbo].[SPK_ZAK_REP_PLAN_WITH_PAPER] (@num numeric(10) )
as
begin
	select * from MY_TABLE where NUM=@num
end

go
declare @BUM_TOTAL table (
Mater    varchar(255),
TIP_BUMAGI    varchar(255),
BUM_NAME    varchar(255),
PLOTN_BUMAGI decimal(25,5),
ISH_FORMAT    varchar(255),                                                                                                                                                                        WEIGHT decimal(25,5) 
)

insert into @BUM_TOTAL exec SPK_ZAK_REP_PLAN_WITH_PAPER (555)
select * from @BUM_TOTAL
...
Рейтинг: 0 / 0
09.03.2021, 11:11
    #40051823
redsunrise
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
временная таблица из другой хранимке
andron81,
создайте во временной ## таблице поле SPID, засовывайте в нее текущий @@SPID
из другой процедуры читайте с условием SPID = @@SPID
...
Рейтинг: 0 / 0
09.03.2021, 11:13
    #40051824
andron81
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
временная таблица из другой хранимке
redsunrise
andron81,
создайте во временной ## таблице поле SPID, засовывайте в нее текущий @@SPID
из другой процедуры читайте с условием SPID = @@SPID


я думал над этим. плохо понимаю разницу ## с обычной "стационарной" таблицей . поэтому боюсь , что ## будет разрастаться. и её придется чистить. правда сейчас я подумал, что можно делать delete ## where SPID = после отработки второй хранимки. сейчас попробую. Этот метод мне не нравится изначально, но если ничего больше нельзя , то придется его
...
Рейтинг: 0 / 0
09.03.2021, 11:20
    #40051826
andron81
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
временная таблица из другой хранимке
DaniilSeryi
А вариант, когда процедура не сохраняет данные во временной таблице, а выводит их, а код после этой процедуры их перенаправляет во временную переменную, Вас не устроит?

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
ALTER procedure [dbo].[SPK_ZAK_REP_PLAN_WITH_PAPER] (@num numeric(10) )
as
begin
	select * from MY_TABLE where NUM=@num
end

go
declare @BUM_TOTAL table (
Mater    varchar(255),
TIP_BUMAGI    varchar(255),
BUM_NAME    varchar(255),
PLOTN_BUMAGI decimal(25,5),
ISH_FORMAT    varchar(255),                                                                                                                                                                        WEIGHT decimal(25,5) 
)

insert into @BUM_TOTAL exec SPK_ZAK_REP_PLAN_WITH_PAPER (555)

select * from @BUM_TOTAL





надо чтобы через храмки обязательно. у меня ведь кристал репортс
...
Рейтинг: 0 / 0
09.03.2021, 11:37
    #40051830
redsunrise
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
временная таблица из другой хранимке
andron81
redsunrise
andron81,
создайте во временной ## таблице поле SPID, засовывайте в нее текущий @@SPID
из другой процедуры читайте с условием SPID = @@SPID


я думал над этим. плохо понимаю разницу ## с обычной "стационарной" таблицей . поэтому боюсь , что ## будет разрастаться. и её придется чистить. правда сейчас я подумал, что можно делать delete ## where SPID = после отработки второй хранимки. сейчас попробую. Этот метод мне не нравится изначально, но если ничего больше нельзя , то придется его


как вариант можете из одной процедуры в другую через табличную переменную передавать или в первой процедуре возвращать select, а во второй писать результат вызова в какую нить таблицу.
Вообще сколько людей столько и мнений, кто то привык делать так кто то по другому. Еще многое зависит от того какая практика считается нормой в вашей организации.
Но я бы сделал через SPID с постоянной таблицей если предполагается что работа идет через сеансы.
...
Рейтинг: 0 / 0
09.03.2021, 11:39
    #40051832
L_argo
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
временная таблица из другой хранимке
авторнадо чтобы через храмки обязательно. у меня ведь кристал репортс Ну так создайте ее прямо в программе (в основном коннекте или в коннекте, который используется репортом) перед запуском отчета. Отчет ее увидит.
Чистить ВТ - нормальная практика.
Хотя я так понимаю, если Кристалл использует собственный коннект... тогда увидеть ВТ не удастся :(

Мы с кристалом поступали так: записывали результат репорта в ACCESS-таблицу и открывали эту таблицу кристалом. По скорости было вполне приемлимо.
Хоть это изврат, но другого выхода не было.
...
Рейтинг: 0 / 0
09.03.2021, 11:41
    #40051834
andron81
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
временная таблица из другой хранимке
L_argo
авторнадо чтобы через храмки обязательно. у меня ведь кристал репортс
Ну так создайте ее прямо в программе (в основном коннекте или в коннекте, который используется репортом) перед запуском отчета. Отчет ее увидит.
Чистить ВТ - нормальная практика.

нет доступа к программе. только к хранимкам MS SQL Server.

надо похоже делать как советовал товарищ при помощи @@SPID. А таблицу делать постоянную.
...
Рейтинг: 0 / 0
09.03.2021, 12:05
    #40051846
Владислав Колосов
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
временная таблица из другой хранимке
andron81,

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


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