|
временная таблица из другой хранимке
|
|||
---|---|---|---|
#18+
Добрый всем день. А есть ли возможность использования временной таблицы созданной в одной из хранимок в другой х.п? Я читал , что временные таблицы можно использовать в рамках одного сеанса, однако на деле оказывается , что в рамках хранимой процедуры где она создается. но может я неверно понимаю или док который я нашел не корректный. к примеру вот это код не работает. Таблица #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.
... |
|||
:
Нравится:
Не нравится:
|
|||
09.03.2021, 09:36 |
|
временная таблица из другой хранимке
|
|||
---|---|---|---|
#18+
andron81, У вас же в примере хп не вызывается из другой хп... ... |
|||
:
Нравится:
Не нравится:
|
|||
09.03.2021, 10:05 |
|
временная таблица из другой хранимке
|
|||
---|---|---|---|
#18+
Критик 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.
from test1 NULLtest1rest 55.00000 90x60 555.00000 сообщение: 208, уровень: 16, состояние: 0, процедура: test2, строка: 5 [строка начала пакета: 30] Недопустимое имя объекта "#BUM_TOTAL". ... |
|||
:
Нравится:
Не нравится:
|
|||
09.03.2021, 10:31 |
|
временная таблица из другой хранимке
|
|||
---|---|---|---|
#18+
Я создаю времянку в действующем сеансе обычным запросом select * into #..... from .... where 1=2 и использую ее в любом месте и в любой ХП. Есть даже возможность ее пересоздания на случай потери коннекта. Времянка, созданная в ХП будет видна только внутри этой ХП. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.03.2021, 10:46 |
|
временная таблица из другой хранимке
|
|||
---|---|---|---|
#18+
L_argo Я создаю времянку в действующем сеансе обычным запросом select * into #..... from .... where 1=2 и использую ее в любом месте и в любой ХП. Есть даже возможность ее пересоздания на случай потери коннекта. Времянка, созданная в ХП будет видна только внутри этой ХП. мне надо именно в хранимой процедуре. так необходимо потому, что есть отчет кристал репортс где в футере надо отработать итоговую таблицу из данных составленных из основных данных, делать я это собирался сабрепорторм. вот для чего это ... |
|||
:
Нравится:
Не нравится:
|
|||
09.03.2021, 10:56 |
|
временная таблица из другой хранимке
|
|||
---|---|---|---|
#18+
L_argo Я создаю времянку в действующем сеансе обычным запросом select * into #..... from .... where 1=2 и использую ее в любом месте и в любой ХП. Есть даже возможность ее пересоздания на случай потери коннекта. Времянка, созданная в ХП будет видна только внутри этой ХП. я почему-то думал , что это в одном сеансе : Код: sql 1. 2.
... |
|||
:
Нравится:
Не нравится:
|
|||
09.03.2021, 10:59 |
|
временная таблица из другой хранимке
|
|||
---|---|---|---|
#18+
А вариант, когда процедура не сохраняет данные во временной таблице, а выводит их, а код после этой процедуры их перенаправляет во временную переменную, Вас не устроит? Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17.
... |
|||
:
Нравится:
Не нравится:
|
|||
09.03.2021, 11:11 |
|
временная таблица из другой хранимке
|
|||
---|---|---|---|
#18+
andron81, создайте во временной ## таблице поле SPID, засовывайте в нее текущий @@SPID из другой процедуры читайте с условием SPID = @@SPID ... |
|||
:
Нравится:
Не нравится:
|
|||
09.03.2021, 11:11 |
|
временная таблица из другой хранимке
|
|||
---|---|---|---|
#18+
redsunrise andron81, создайте во временной ## таблице поле SPID, засовывайте в нее текущий @@SPID из другой процедуры читайте с условием SPID = @@SPID я думал над этим. плохо понимаю разницу ## с обычной "стационарной" таблицей . поэтому боюсь , что ## будет разрастаться. и её придется чистить. правда сейчас я подумал, что можно делать delete ## where SPID = после отработки второй хранимки. сейчас попробую. Этот метод мне не нравится изначально, но если ничего больше нельзя , то придется его ... |
|||
:
Нравится:
Не нравится:
|
|||
09.03.2021, 11:13 |
|
временная таблица из другой хранимке
|
|||
---|---|---|---|
#18+
DaniilSeryi А вариант, когда процедура не сохраняет данные во временной таблице, а выводит их, а код после этой процедуры их перенаправляет во временную переменную, Вас не устроит? Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18.
надо чтобы через храмки обязательно. у меня ведь кристал репортс ... |
|||
:
Нравится:
Не нравится:
|
|||
09.03.2021, 11:20 |
|
временная таблица из другой хранимке
|
|||
---|---|---|---|
#18+
andron81 redsunrise andron81, создайте во временной ## таблице поле SPID, засовывайте в нее текущий @@SPID из другой процедуры читайте с условием SPID = @@SPID я думал над этим. плохо понимаю разницу ## с обычной "стационарной" таблицей . поэтому боюсь , что ## будет разрастаться. и её придется чистить. правда сейчас я подумал, что можно делать delete ## where SPID = после отработки второй хранимки. сейчас попробую. Этот метод мне не нравится изначально, но если ничего больше нельзя , то придется его как вариант можете из одной процедуры в другую через табличную переменную передавать или в первой процедуре возвращать select, а во второй писать результат вызова в какую нить таблицу. Вообще сколько людей столько и мнений, кто то привык делать так кто то по другому. Еще многое зависит от того какая практика считается нормой в вашей организации. Но я бы сделал через SPID с постоянной таблицей если предполагается что работа идет через сеансы. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.03.2021, 11:37 |
|
временная таблица из другой хранимке
|
|||
---|---|---|---|
#18+
авторнадо чтобы через храмки обязательно. у меня ведь кристал репортс Ну так создайте ее прямо в программе (в основном коннекте или в коннекте, который используется репортом) перед запуском отчета. Отчет ее увидит. Чистить ВТ - нормальная практика. Хотя я так понимаю, если Кристалл использует собственный коннект... тогда увидеть ВТ не удастся :( Мы с кристалом поступали так: записывали результат репорта в ACCESS-таблицу и открывали эту таблицу кристалом. По скорости было вполне приемлимо. Хоть это изврат, но другого выхода не было. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.03.2021, 11:39 |
|
временная таблица из другой хранимке
|
|||
---|---|---|---|
#18+
L_argo авторнадо чтобы через храмки обязательно. у меня ведь кристал репортс Чистить ВТ - нормальная практика. нет доступа к программе. только к хранимкам MS SQL Server. надо похоже делать как советовал товарищ при помощи @@SPID. А таблицу делать постоянную. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.03.2021, 11:41 |
|
временная таблица из другой хранимке
|
|||
---|---|---|---|
#18+
andron81, нужными свойствами обладают курсоры. Глобальный курсор существует на время сеанса может быть создан и прочитан независимыми процедурами. Но надо помнить, что курсор потребляет ресурсы и может накладывать блокировки на исходные таблицы. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.03.2021, 12:05 |
|
|
start [/forum/topic.php?fid=46&fpage=31&tid=1684989]: |
0ms |
get settings: |
10ms |
get forum list: |
15ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
43ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
52ms |
get tp. blocked users: |
2ms |
others: | 12ms |
total: | 156ms |
0 / 0 |