Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Передача таблицы в хранимую процедуру  [new]
avec
Member

Откуда: Москва
Сообщений: 826
Есть вопрос. Нужно сформировать некую временную табличку и затем передать ее в несколько хранимых процедур (чтобы не формировать ее заново в каждой хранимке). Думал, что это можно сделать переменной table - но не тут-то было :-( Пытался использовать локальную временную таблицу #table, но вызываемая хранимка ее не видит. С глобальной врем.табл. получилось, но стремно использовать глобальные временные таблицы для этого. Может, есть какой иной способ?
12 апр 05, 14:14    [1461030]     Ответить | Цитировать Сообщить модератору
 Re: Передача таблицы в хранимую процедуру  [new]
tpg
Member

Откуда: Novosibirsk
Сообщений: 23902
https://www.sql.ru/articles/mssql/03060701ArraysAndListsInSQLServer.shtml
12 апр 05, 14:15    [1461035]     Ответить | Цитировать Сообщить модератору
 Re: Передача таблицы в хранимую процедуру  [new]
Glory
Member

Откуда:
Сообщений: 104751
Пытался использовать локальную временную таблицу #table, но вызываемая хранимка ее не видит.
Что-то вы путаете или неправильно делаете
12 апр 05, 14:17    [1461047]     Ответить | Цитировать Сообщить модератору
 Re: Передача таблицы в хранимую процедуру  [new]
Glory
Member

Откуда:
Сообщений: 104751
Скорее всего таблицу создаете в одном коннекте а обращаетесь к ней в другом
12 апр 05, 14:18    [1461053]     Ответить | Цитировать Сообщить модератору
 Re: Передача таблицы в хранимую процедуру  [new]
tpg
Member

Откуда: Novosibirsk
Сообщений: 23902
Можно, иногда, пользовать такой прием (во всяком случае я иногда именно так и делаю) - в клиентском приложении создается временная таблица #t, заполняется (или нет), а потом дергаются ХП в этом же коннекте, которые дергают эту таблицу.
12 апр 05, 14:20    [1461066]     Ответить | Цитировать Сообщить модератору
 Re: Передача таблицы в хранимую процедуру  [new]
vizier
Member

Откуда:
Сообщений: 182
У меня все видит.

CREATE  PROCEDURE TestTable AS
insert into #Test(ppl) values(1)
insert into #Test(ppl) values(2)
insert into #Test(ppl) values(3)
insert into #Test(ppl) values(4)
go

CREATE  PROCEDURE Report(...)AS

create table #Test(
  ppl bigint
)

exec dbo.TestTable

select * from #test
go
12 апр 05, 14:21    [1461072]     Ответить | Цитировать Сообщить модератору
 Re: Передача таблицы в хранимую процедуру  [new]
avec
Member

Откуда: Москва
Сообщений: 826
2Glory

Фишка в том, что "головная" хранимка, которая генерит эту "основополагающую" временную табличку xxx вызывает другую, которая запускает DTS-пакет, и он в свою очередь для подготовки данных и должен использовать результаты из этой временной таблички xxx. Поскольку, видимо, эти хранимки вызываются из разных соединений, то локальная временная таблица и не видится.

Признаю, что написал предыдущее сообщение не совсем корректно.
12 апр 05, 14:25    [1461097]     Ответить | Цитировать Сообщить модератору
 Re: Передача таблицы в хранимую процедуру  [new]
Glory
Member

Откуда:
Сообщений: 104751
Фишка в том, что "головная" хранимка, которая генерит эту "основополагающую" временную табличку xxx вызывает другую, которая запускает DTS-пакет, и он в свою очередь для подготовки данных и должен использовать результаты из этой временной таблички xxx. Поскольку, видимо, эти хранимки вызываются из разных соединений, то локальная временная таблица и не видится.
Имхо логика потоков информации у вас неправильная.
DTS должен вызвывать что-то что _вернет_ ему набор.
12 апр 05, 14:29    [1461114]     Ответить | Цитировать Сообщить модератору
 Re: Передача таблицы в хранимую процедуру  [new]
tedy
Member

Откуда:
Сообщений: 83
Можно использовать постоянную таблицу с временными данными.
12 апр 05, 14:29    [1461117]     Ответить | Цитировать Сообщить модератору
 Re: Передача таблицы в хранимую процедуру  [new]
avec
Member

Откуда: Москва
Сообщений: 826
2 Glory

DTS у меня и вызывает хранимку, которая возвращает ему набор данных. Но для построения этого набора она должна использовать некую промежуточную табличку, где, грубо говоря, лежат ID людей, записи по которым надо отобрать.

DTS-ов у меня 6. Процедур подготовки данных для них тоже 6 (выборки из разных таблиц). И в каждой используется одна и та же таблица с ID этих людей. Я могу генерить эту таблицу 6 раз для каждого DTSа, но с точки зрения логики, производительности и быстроты выполнения это неправильно IMHO. Потому вот пытаюсь как-то решить эту задачку :-)
12 апр 05, 14:44    [1461217]     Ответить | Цитировать Сообщить модератору
 Re: Передача таблицы в хранимую процедуру  [new]
Glory
Member

Откуда:
Сообщений: 104751
Но для построения этого набора она должна использовать некую промежуточную табличку, где, грубо говоря, лежат ID людей, записи по которым надо отобрать
И почему она не может их сама формировать ? Или запускать то, что сформирует и _вернет_ ей данные ?
12 апр 05, 14:49    [1461249]     Ответить | Цитировать Сообщить модератору
 Re: Передача таблицы в хранимую процедуру  [new]
avec
Member

Откуда: Москва
Сообщений: 826
Можно. Но 6 раз будет выполнено одно и то же для 6 DTSов.
12 апр 05, 14:53    [1461268]     Ответить | Цитировать Сообщить модератору
 Re: Передача таблицы в хранимую процедуру  [new]
avec
Member

Откуда: Москва
Сообщений: 826
А кстати, вот эта проблема все равно остается (см. последний пост):
https://www.sql.ru/forum/actualthread.aspx?tid=174137
12 апр 05, 15:20    [1461434]     Ответить | Цитировать Сообщить модератору
 Re: Передача таблицы в хранимую процедуру  [new]
Alxss
Guest
tedy
Можно использовать постоянную таблицу с временными данными.
плохое решение -- будет работать корректно только в однопользовательской среде. В многопользовательской среде постоянная таблица будет затираться (если делается drop table) или искажаться другими пользователями.

в MS-SQL есть вариант временной таблицы: ##name_temp_table
Эта временная таблица видна и из других сессий. Убивается, когда закрывается последняя использующая таблицу сессия.( Но всё-равно может портиться другим пользователем.:( )
12 апр 05, 16:08    [1461685]     Ответить | Цитировать Сообщить модератору
 Re: Передача таблицы в хранимую процедуру  [new]
tedy
Member

Откуда:
Сообщений: 83
Alxss
tedy
Можно использовать постоянную таблицу с временными данными.
плохое решение -- будет работать корректно только в однопользовательской среде. В многопользовательской среде постоянная таблица будет затираться (если делается drop table) или искажаться другими пользователями.

Можно добавить поле @@SPID
Для вышеприведенного случая может и не выход, а вообщем - вполне.
12 апр 05, 16:30    [1461774]     Ответить | Цитировать Сообщить модератору
 Re: Передача таблицы в хранимую процедуру  [new]
tpg
Member

Откуда: Novosibirsk
Сообщений: 23902
tedy
Alxss
tedy
Можно использовать постоянную таблицу с временными данными.
плохое решение -- будет работать корректно только в однопользовательской среде. В многопользовательской среде постоянная таблица будет затираться (если делается drop table) или искажаться другими пользователями.

Можно добавить поле @@SPID
Для вышеприведенного случая может и не выход, а вообщем - вполне.

Для уникальной идентификации "своих" строк надо б кроме спида ещё и login_time из таблички master..sysprocesses зафиксировать для своего логина, тогда - красота... ;)
13 апр 05, 07:09    [1463016]     Ответить | Цитировать Сообщить модератору
Между сообщениями интервал более 1 года.
 Re: Передача таблицы в хранимую процедуру  [new]
koly86
Member

Откуда:
Сообщений: 1
vizier
У меня все видит.

CREATE  PROCEDURE TestTable AS
insert into #Test(ppl) values(1)
insert into #Test(ppl) values(2)
insert into #Test(ppl) values(3)
insert into #Test(ppl) values(4)
go

CREATE  PROCEDURE Report(...)AS

create table #Test(
  ppl bigint
)

exec dbo.TestTable

select * from #test
go


а можно к этому коду добавить комментарии.
А вообще такая проблема. Дано: грида, хранимая процедура, чекбокс в гриде. приложение многопользовательское, в хранимой процедуре делаю временную таблицу, переписываю все данные из таблиц во временную таблицу и добавляю 1 as CB, если делаю локальную таблицу в хранимой процедуре, делфи ее не находит, глобальную делать нельзя, что можно сделать в этом случае?
22 янв 15, 11:52    [17153106]     Ответить | Цитировать Сообщить модератору
 Re: Передача таблицы в хранимую процедуру  [new]
Glory
Member

Откуда:
Сообщений: 104751
koly86
а можно к этому коду добавить комментарии.

добавляйте

koly86
А вообще такая проблема. Дано: грида, хранимая процедура, чекбокс в гриде. приложение многопользовательское, в хранимой процедуре делаю временную таблицу, переписываю все данные из таблиц во временную таблицу и добавляю 1 as CB, если делаю локальную таблицу в хранимой процедуре, делфи ее не находит, глобальную делать нельзя, что можно сделать в этом случае?

Локальная временная таблица, созданная внутри процедуры, автоматически удаляется после завершения процедуы
22 янв 15, 11:57    [17153140]     Ответить | Цитировать Сообщить модератору
 Re: Передача таблицы в хранимую процедуру  [new]
WarAnt
Member

Откуда: Питер
Сообщений: 2423
koly86,
автор
что можно сделать в этом случае?

Делать временную таблицу до вызова процедуры, тогда её будет видеть и процедура и дельфи, при условии что дельфи будет запускать батч в котором все это делается.
22 янв 15, 12:02    [17153184]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить