Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
 Как сделать INSERT INTO #Tmp_Table вместе с динамическим запросом?  [new]
Cammomile
Member

Откуда:
Сообщений: 1214
SQL SERVER 2005


Есть запрос:
SET @Query = 'SELECT ' + @Fields + ' FROM SomeTable'
EXEC (@Query )

Задача — вставить то, что этот запрос возвращает в локальную временную таблицу.

EXEC вместе с SELECT INTO не работает, а в OPENQUERY и OPENROWSET нельзя передавать переменную с текстом запроса.
25 мар 13, 15:02    [14092442]     Ответить | Цитировать Сообщить модератору
 Re: Как сделать INSERT INTO #Tmp_Table вместе с динамическим запросом?  [new]
WarAnt
Member

Откуда: Питер
Сообщений: 2423
Cammomile

EXEC вместе с SELECT INTO не работает


так и говорит "неработаю"?
25 мар 13, 15:06    [14092476]     Ответить | Цитировать Сообщить модератору
 Re: Как сделать INSERT INTO #Tmp_Table вместе с динамическим запросом?  [new]
WarAnt
Member

Откуда: Питер
Сообщений: 2423
Cammomile,

автор
OPENQUERY и OPENROWSET нельзя передавать переменную с текстом запроса.


зато сам OPENQUERY можно передать в переменную с текстом запроса.
25 мар 13, 15:07    [14092484]     Ответить | Цитировать Сообщить модератору
 Re: Как сделать INSERT INTO #Tmp_Table вместе с динамическим запросом?  [new]
Гость333
Member

Откуда:
Сообщений: 3683
Cammomile
EXEC вместе с SELECT INTO не работает

Зато "INSERT #Tmp_Table EXEC (@Query)" — работает.
25 мар 13, 15:08    [14092493]     Ответить | Цитировать Сообщить модератору
 Re: Как сделать INSERT INTO #Tmp_Table вместе с динамическим запросом?  [new]
WarAnt
Member

Откуда: Питер
Сообщений: 2423
Гость333
Cammomile
EXEC вместе с SELECT INTO не работает

Зато "INSERT #Tmp_Table EXEC (@Query)" — работает.


да кстати, чета я сразу select вместо insert не разглядел:)
25 мар 13, 15:10    [14092502]     Ответить | Цитировать Сообщить модератору
 Re: Как сделать INSERT INTO #Tmp_Table вместе с динамическим запросом?  [new]
Cammomile
Member

Откуда:
Сообщений: 1214
>так и говорит "неработаю"?
Скажем так: конструкция, которая привидет к такому же результату, как и
'SELECT [Field] INTO #Temp_Table FROM Sometable', но содержащая EXECCUTE(@Query) мне неизвестна.

>зато сам OPENQUERY можно передать в переменную с текстом запроса.
И что это дает?
25 мар 13, 15:12    [14092516]     Ответить | Цитировать Сообщить модератору
 Re: Как сделать INSERT INTO #Tmp_Table вместе с динамическим запросом?  [new]
Cammomile
Member

Откуда:
Сообщений: 1214
>Зато "INSERT #Tmp_Table EXEC (@Query)" — работает.
Это прекрасно, но запрос динамический: список полей неизвестен.
25 мар 13, 15:13    [14092530]     Ответить | Цитировать Сообщить модератору
 Re: Как сделать INSERT INTO #Tmp_Table вместе с динамическим запросом?  [new]
iap
Member

Откуда: Москва
Сообщений: 47145
Cammomile
SQL SERVER 2005


Есть запрос:
SET @Query = 'SELECT ' + @Fields + ' FROM SomeTable'
EXEC (@Query )

Задача — вставить то, что этот запрос возвращает в локальную временную таблицу.

EXEC вместе с SELECT INTO не работает, а в OPENQUERY и OPENROWSET нельзя передавать переменную с текстом запроса.
INSERT #Tmp_Table из названия темы и SELECT INTO #Tmp_Table из первого сообщения - это одно и то же, ага!
25 мар 13, 15:22    [14092588]     Ответить | Цитировать Сообщить модератору
 Re: Как сделать INSERT INTO #Tmp_Table вместе с динамическим запросом?  [new]
Cammomile
Member

Откуда:
Сообщений: 1214
Ну глаз замылился, бывает. А тут по делу отвечают, или только ехидничают?
25 мар 13, 15:39    [14092691]     Ответить | Цитировать Сообщить модератору
 Re: Как сделать INSERT INTO #Tmp_Table вместе с динамическим запросом?  [new]
aleks2
Guest
Cammomile
>Зато "INSERT #Tmp_Table EXEC (@Query)" — работает.
Это прекрасно, но запрос динамический: список полей неизвестен.

И нафега, позвольте узнать, вам НЕИЗВЕСТНЫЕ поля?
Можно ваще не запрашивать.
25 мар 13, 15:54    [14092784]     Ответить | Цитировать Сообщить модератору
 Re: Как сделать INSERT INTO #Tmp_Table вместе с динамическим запросом?  [new]
Cammomile
Member

Откуда:
Сообщений: 1214
Бизнес хочет пивот, где столбцами будут уникальные названия позиций товаров, которые, что характерно, не детерменированы во времени.
25 мар 13, 16:05    [14092840]     Ответить | Цитировать Сообщить модератору
 Re: Как сделать INSERT INTO #Tmp_Table вместе с динамическим запросом?  [new]
ВладимирМ
Member

Откуда: г. Москва
Сообщений: 7904
Если решать задачу "в лоб", то надо паралельно с конструированием списка полей для выборки через Alter Table добавлять/удалять поля во временной таблице

if object_id('tempdb..#test') drop table #test

create table #test (f1 int)

declare @Fields varChar(100)
set @Fields = 'f1'

if (...)
begin
   alter table #test add f2 varChar(10)
   set @Fields = @Fields + ',f2'
end


if (...)
begin
   alter table #test add f3 varChar(10)
   set @Fields = @Fields + ',f3'
end

SET @Query = 'SELECT ' + @Fields + ' FROM SomeTable' 
insert #test EXEC (@Query )


А по существу, сама постановка вопроса сомнительна. Если Вы не знаете список полей, которые возвращаете, то как же Вы с этими полями будете дальше работать?
25 мар 13, 16:19    [14092919]     Ответить | Цитировать Сообщить модератору
 Re: Как сделать INSERT INTO #Tmp_Table вместе с динамическим запросом?  [new]
WarAnt
Member

Откуда: Питер
Сообщений: 2423
Cammomile
Бизнес хочет пивот, где столбцами будут уникальные названия позиций товаров, которые, что характерно, не детерменированы во времени.


Тогда вас только динамика спасет от увольнения.

автор
>зато сам OPENQUERY можно передать в переменную с текстом запроса.
И что это дает?


то и дает
...
@query = '...OPENQUERY...'
...
exec (@query)
25 мар 13, 16:20    [14092927]     Ответить | Цитировать Сообщить модератору
 Re: Как сделать INSERT INTO #Tmp_Table вместе с динамическим запросом?  [new]
Cammomile
Member

Откуда:
Сообщений: 1214
Спасибо, только что сам пришел к такому-же результату.


Обычная постановка

DECLARE 
	@Q Varchar(MAX) 
SET @Q = '		   
		SELECT [SomeName], ' + @Fields + '
                --вот тут бы поиметь INTO #Tmp, но увы мне, увы =(
                FROM (SELECT * FROM #TempTable1 ) x
		PIVOT ( MIN([SomeValue]) FOR [FieldName] IN (' + @Fields + ') ) p
                '
EXECUTE (@Q)  
25 мар 13, 16:27    [14092994]     Ответить | Цитировать Сообщить модератору
 Re: Как сделать INSERT INTO #Tmp_Table вместе с динамическим запросом?  [new]
Cammomile
Member

Откуда:
Сообщений: 1214
WarAnt

exec (@query)

В соответсвии с моими скромными познаниями, временная таблица созданная внутри exec() не будет видна снаружи.

От увольнения меня спасает то, что я это четко знаю. Спасибо, что волнуетесь за меня, но это излишне
25 мар 13, 16:29    [14093012]     Ответить | Цитировать Сообщить модератору
 Re: Как сделать INSERT INTO #Tmp_Table вместе с динамическим запросом?  [new]
Гость333
Member

Откуда:
Сообщений: 3683
Cammomile
Обычная постановка

DECLARE 
	@Q Varchar(MAX) 
SET @Q = '		   
		SELECT [SomeName], ' + @Fields + '
                --вот тут бы поиметь INTO #Tmp, но увы мне, увы =(
                FROM (SELECT * FROM #TempTable1 ) x
		PIVOT ( MIN([SomeValue]) FOR [FieldName] IN (' + @Fields + ') ) p
                '
EXECUTE (@Q)  

Как вариант, таки поиметь "INTO #Tmp" внутри переменной @Q, и всю дальнейшую обработку #Tmp делать также в этой самой @Q.
25 мар 13, 16:31    [14093034]     Ответить | Цитировать Сообщить модератору
 Re: Как сделать INSERT INTO #Tmp_Table вместе с динамическим запросом?  [new]
Cammomile
Member

Откуда:
Сообщений: 1214
Да, это конечно вариант, но самый краний.
25 мар 13, 16:32    [14093045]     Ответить | Цитировать Сообщить модератору
 Re: Как сделать INSERT INTO #Tmp_Table вместе с динамическим запросом?  [new]
WarAnt
Member

Откуда: Питер
Сообщений: 2423
Cammomile
WarAnt

exec (@query)

В соответсвии с моими скромными познаниями, временная таблица созданная внутри exec() не будет видна снаружи.

От увольнения меня спасает то, что я это четко знаю. Спасибо, что волнуетесь за меня, но это излишне


я вас удивлю но есть временные таблицы которые видны с наружи, глобальные.
25 мар 13, 16:45    [14093161]     Ответить | Цитировать Сообщить модератору
 Re: Как сделать INSERT INTO #Tmp_Table вместе с динамическим запросом?  [new]
Cammomile
Member

Откуда:
Сообщений: 1214
WarAnt
я вас удивлю но есть временные таблицы которые видны с наружи, глобальные.


Cammomile
Задача — вставить то, что этот запрос возвращает в локальную временную таблицу
25 мар 13, 16:54    [14093221]     Ответить | Цитировать Сообщить модератору
 Re: Как сделать INSERT INTO #Tmp_Table вместе с динамическим запросом?  [new]
Glory
Member

Откуда:
Сообщений: 104751
Cammomile
Задача — вставить то, что этот запрос возвращает в локальную временную таблицу.

Работать с неизвестным набором неизвестными методами для получения неизвестных результатов ??
Пишите CLR
25 мар 13, 17:01    [14093272]     Ответить | Цитировать Сообщить модератору
 Re: Как сделать INSERT INTO #Tmp_Table вместе с динамическим запросом?  [new]
Cammomile
Member

Откуда:
Сообщений: 1214
Увы, написание сборок мне недоступно по чисто административным причниам. Все нужно сделать только на TSQL.
25 мар 13, 17:03    [14093290]     Ответить | Цитировать Сообщить модератору
 Re: Как сделать INSERT INTO #Tmp_Table вместе с динамическим запросом?  [new]
WarAnt
Member

Откуда: Питер
Сообщений: 2423
Cammomile,

какой тогда смысл в этом комментарии?
автор
--вот тут бы поиметь INTO #Tmp, но увы мне, увы =(
25 мар 13, 17:05    [14093309]     Ответить | Цитировать Сообщить модератору
 Re: Как сделать INSERT INTO #Tmp_Table вместе с динамическим запросом?  [new]
Glory
Member

Откуда:
Сообщений: 104751
Cammomile
Увы, написание сборок мне недоступно по чисто административным причниам.

Для написания сборок не нужны админские права. Права нужны для регистрации сборки
25 мар 13, 17:05    [14093312]     Ответить | Цитировать Сообщить модератору
 Re: Как сделать INSERT INTO #Tmp_Table вместе с динамическим запросом?  [new]
Cammomile
Member

Откуда:
Сообщений: 1214
В итоге решил вопрос через паралельную сборку "альтерящего" временную таблицу динамического запроса.

Спасибо за помощь, коллеги.
25 мар 13, 17:08    [14093337]     Ответить | Цитировать Сообщить модератору
 Re: Как сделать INSERT INTO #Tmp_Table вместе с динамическим запросом?  [new]
Cammomile
Member

Откуда:
Сообщений: 1214
Glory
Cammomile
Увы, написание сборок мне недоступно по чисто административным причниам.

Для написания сборок не нужны админские права. Права нужны для регистрации сборки

Я имел в виду другое. Для написания сборки надо купить и установить вижуал студио, а работадатель жмется >_<

Но все равно спасибо за момощь!
25 мар 13, 17:11    [14093357]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
Все форумы / Microsoft SQL Server Ответить