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

Откуда:
Сообщений: 90
DECLARE @cols VARCHAR(1000)
DECLARE @sqlquery VARCHAR(2000)
 
SELECT  @cols = STUFF(( SELECT distinct  ',' + QuoteName([name_disc])
                        FROM disciplines  FOR XML PATH('') ), 1, 1, '')
 
SET @sqlquery = 'SELECT * FROM
      (SELECT (s.family+char(1)+s.name+parentname) as fio, rating, name_disc 
       FROM ratings as Uo inner join students as S on uo.student=s.idstudent inner join disciplines as D on d.iddiscipline=uo.discipline) base
       PIVOT (SUM(rating) FOR [name_disc] 
       IN (' + @cols + ')) AS finalpivot' 
 
EXECUTE ( @sqlquery )


Как вывести результат в локальную временную таблицу? Как в глобальную я знаю, а вот при попытке вывода в локальную, она (таблица) перестает быть видимой.
8 окт 14, 11:49    [16675304]     Ответить | Цитировать Сообщить модератору
 Re: Вывод из данных процедуры в локальную временную таблицу  [new]
LexusR
Member

Откуда: Novosibirsk
Сообщений: 1887
if OBJECT_ID('tempdb..#data') is not null drop table #data
create table #data(id int,name varchar(10),val int)
insert into #data values(1,'name1',10),(1,'name2',20),(1,'name3',30),(2,'name1',100),(2,'name2',200),(2,'name3',300)
select * from #data

DECLARE @cols VARCHAR(1000)
DECLARE @sqlquery VARCHAR(2000)

SELECT  @cols = STUFF(( SELECT distinct  ',' + QuoteName([name])
                        FROM #data  FOR XML PATH('') ), 1, 1, '')

if OBJECT_ID('tempdb..#result') is not null drop table #result
create table #result(id int)
set  @sqlquery = 'alter table #result add ' +REPLACE(@cols,',',' int,')+ ' int'                     
exec(@sqlquery)

                        
SET @sqlquery = 'SELECT id,'+@cols+' FROM #data PIVOT (SUM([val]) FOR [name] 
       IN (' + @cols + ')) AS finalpivot' 
 
INSERT INTO #result EXECUTE ( @sqlquery )

select * from #result
8 окт 14, 12:12    [16675507]     Ответить | Цитировать Сообщить модератору
 Re: Вывод из данных процедуры в локальную временную таблицу  [new]
Северянин
Member

Откуда:
Сообщений: 90
LexusR,
Не, совсем не то выдает.
Дело в том, что если я вместо

SET @sqlquery = 'SELECT * FROM
(SELECT (s.family+char(1)+s.name+parentname) as fio, rating, name_disc
FROM ratings as Uo inner join students as S on uo.student=s.idstudent inner join disciplines as D on d.iddiscipline=uo.discipline) base
PIVOT (SUM(rating) FOR [name_disc]
IN (' + @cols + ')) AS finalpivot'

Задаю

SET @sqlquery = 'SELECT * into ##глобальная_временная_таблица FROM
(SELECT (s.family+char(1)+s.name+parentname) as fio, rating, name_disc
FROM ratings as Uo inner join students as S on uo.student=s.idstudent inner join disciplines as D on d.iddiscipline=uo.discipline) base
PIVOT (SUM(rating) FOR [name_disc]
IN (' + @cols + ')) AS finalpivot'

то результат сбрасывается в эту таблицу (##)
А как можно(ли) в локальную?
Как в обход, да на костылях я соображу, а вот грамотно чтоб?
8 окт 14, 14:09    [16676452]     Ответить | Цитировать Сообщить модератору
 Re: Вывод из данных процедуры в локальную временную таблицу  [new]
Glory
Member

Откуда:
Сообщений: 104760
Северянин
Как в обход, да на костылях я соображу, а вот грамотно чтоб?

А грамотно - это читать документацию, где ясно сказано, что локальная временная таблица автоматически удаляется по окончании создавшего ее пакета.
8 окт 14, 14:12    [16676479]     Ответить | Цитировать Сообщить модератору
 Re: Вывод из данных процедуры в локальную временную таблицу  [new]
o-o
Guest
Северянин,

много букв сбивает с толку?
свою таблицу #result создавайте ЗАРАНЕЕ.
никакого select into, только insert into в уже имеющуюся
8 окт 14, 14:14    [16676491]     Ответить | Цитировать Сообщить модератору
 Re: Вывод из данных процедуры в локальную временную таблицу  [new]
Северянин
Member

Откуда:
Сообщений: 90
o-o,
Если бы я мог создать ее заранее, мне тогда эти изощрения совершенно ни к чему. Я не знаю, сколько полей с какими названиями будет, почему PIVOT и использую.
8 окт 14, 14:28    [16676605]     Ответить | Цитировать Сообщить модератору
 Re: Вывод из данных процедуры в локальную временную таблицу  [new]
Северянин
Member

Откуда:
Сообщений: 90
Glory,
Нет так нет, хоть успокоюсь, а то вдруг решение простое есть, а я и не знаю.
8 окт 14, 14:29    [16676613]     Ответить | Цитировать Сообщить модератору
 Re: Вывод из данных процедуры в локальную временную таблицу  [new]
Glory
Member

Откуда:
Сообщений: 104760
Северянин
Если бы я мог создать ее заранее, мне тогда эти изощрения совершенно ни к чему.

Ну так разве вам не показали, как создать ее заранее ?

Северянин
Я не знаю, сколько полей с какими названиями будет, почему PIVOT и использую.

Зачем вам вообще временная таблица понадобилась?
8 окт 14, 14:29    [16676615]     Ответить | Цитировать Сообщить модератору
 Re: Вывод из данных процедуры в локальную временную таблицу  [new]
o-o
Guest
Северянин
o-o,
Если бы я мог создать ее заранее...

а что по-вашему LexusR-то делает???
а вы все свое гнете...
8 окт 14, 14:36    [16676644]     Ответить | Цитировать Сообщить модератору
 Re: Вывод из данных процедуры в локальную временную таблицу  [new]
Северянин
Member

Откуда:
Сообщений: 90
o-o
Северянин
o-o,
Если бы я мог создать ее заранее...

а что по-вашему LexusR-то делает???
а вы все свое гнете...

Прошу прощения, но я Вас не понял.
8 окт 14, 14:40    [16676683]     Ответить | Цитировать Сообщить модератору
 Re: Вывод из данных процедуры в локальную временную таблицу  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 8316
В реляционных базах данных неопределенность, в общем-то, не допускается. Т.е. количество, тип и размерность столбцов должны быть известны на этапе разработки. Если же всё это варьируется, то необходим конвертер-стандартизатор.
8 окт 14, 14:40    [16676687]     Ответить | Цитировать Сообщить модератору
 Re: Вывод из данных процедуры в локальную временную таблицу  [new]
LexusR
Member

Откуда: Novosibirsk
Сообщений: 1887
Северянин
o-o,
Если бы я мог создать ее заранее, мне тогда эти изощрения совершенно ни к чему. Я не знаю, сколько полей с какими названиями будет, почему PIVOT и использую.


я вам в примере и показал как в заранее созданную внешнюю временную таблицу добавить заранее неизвестные вам поля -те же что и в динамическом запросе
8 окт 14, 14:42    [16676695]     Ответить | Цитировать Сообщить модератору
 Re: Вывод из данных процедуры в локальную временную таблицу  [new]
Северянин
Member

Откуда:
Сообщений: 90
Glory
Зачем вам вообще временная таблица понадобилась?


Так я потом еще много чего с ней делаю, а потом обработанные данные из приложения вызываю, чтоб мудреный отчет составить.
8 окт 14, 14:44    [16676711]     Ответить | Цитировать Сообщить модератору
 Re: Вывод из данных процедуры в локальную временную таблицу  [new]
Glory
Member

Откуда:
Сообщений: 104760
Северянин
Так я потом еще много чего с ней делаю,

А сразу это "много чего" нельзя сделать в том же динамическом запросе ?
8 окт 14, 14:46    [16676725]     Ответить | Цитировать Сообщить модератору
 Re: Вывод из данных процедуры в локальную временную таблицу  [new]
Северянин
Member

Откуда:
Сообщений: 90
Glory,
Здесь ключевое слово много(чего ещё). И я совсем не уверен, что не понадобится ещё больше. Все запихать в один динамический запрос? Я хочу промежуточные результаты контролировать.
8 окт 14, 15:01    [16676813]     Ответить | Цитировать Сообщить модератору
 Re: Вывод из данных процедуры в локальную временную таблицу  [new]
Glory
Member

Откуда:
Сообщений: 104760
Северянин
Здесь ключевое слово много(чего ещё).

И что
С временной таблицей придется _меньше_ кода, чем его будет динамическом запросе что ли ?

Северянин
Я хочу промежуточные результаты контролировать.

Типа как вы будете их контролировать с временной таблицей ?
8 окт 14, 15:05    [16676858]     Ответить | Цитировать Сообщить модератору
 Re: Вывод из данных процедуры в локальную временную таблицу  [new]
Северянин
Member

Откуда:
Сообщений: 90
Glory,
Может Вы и правы. Идея неплохая. Я подумаю.
-------------
Спасибо всем за помощь.
8 окт 14, 15:12    [16676912]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить