Форум: "Прочее";
Текущий архив: 2010.12.26;
Скачать: [xml.tar.bz2];
ВнизMSSQL. OPENQUERY. Как linked_server := self ? Найти похожие ветки
← →
12 © (2010-09-15 11:56) [0]Нужно быстро переделать хранимки, возвращающие tabl, чтоб можно было делать select из них.
т.е. есть
exec GetBLABLA1
вернет
с1 с2 с3
1 2 3
1 3 4
думаю, проще всего мне сделать
select * from OPENQUERY ( linked_server ,"exec GetBLABLA1" )
загвоздка linked_server
надо что-то типа аналога self, ведь сам себе сервер по-идее должен быть linked, без явного указания. Или нет?
т.е. как то так хочу
select * from OPENQUERY ( self ,"exec GetBLABLA1" )) T1
join
(select * from OPENQUERY ( self ,"exec GetBLABLA2" ) T2
on T2.c1 = T1.c1
on T2.c2 = T1.c1
← →
12 © (2010-09-15 12:02) [1]
> on T2.c2 = T1.c1
второй раз лишнее, разумеется
← →
Дмитрий Тимохов (2010-09-15 12:38) [2]Что-то я не понял. Как получить результат процедуры в таблицу?
Может так? (это пример)
create procedure a
as
begin
select 1
end
go
create table e (i int)
insert e exec a
select * from e
← →
Дмитрий Тимохов (2010-09-15 12:38) [3]можно во временную таблицу
← →
12 © (2010-09-15 12:49) [4]нет
процедуры есть(22 шт). Их нельзя трогать.
Можно сделать копии, конечно, но это будет, наверное, неправильно
а OPENQUERY позволяет получить и так.
но sp_add_linked_server не каждый может запустить
вот и думаю: должен же сервер быть сам себе линкован или не должен?
← →
Ega23 © (2010-09-15 12:52) [5]
> Может так? (это пример)
Так нельзя.
create table #xxx1 (c1 int, c2 int, c3 int)
insert into #xxx1 exec GetBLABLA1
create table #xxx2 (c1 int, c2 int, c3 int)
insert into #xxx2 exec GetBLABLA2
select T1.*, T2.*
from #xxx1 T1 join #xxx2 on T1.c2=T2.c1
drop table #xxx1
drop table #xxx2
Если данное безобразие в рамках ХП происходит, то временные таблицы дропнутся автоматом.
← →
Ega23 © (2010-09-15 12:53) [6]
> а OPENQUERY позволяет получить и так.
Он медленный. Делай во временную таблицу, проверено.
← →
Дмитрий Тимохов (2010-09-15 13:05) [7]
> Ega23 © (15.09.10 12:52) [5]
>
>
> > Может так? (это пример)
>
>
> Так нельзя.
вообще не понятно о чем речь в вопросе.
я дал код, который работает.
вроде это автор и спрашивал - как работать в результатом процедуры как с таблицей.
← →
Ega23 © (2010-09-15 13:09) [8]
> я дал код, который работает.
Дим, пардон, я не разглядел сразу.select * from e
мне показалось, что это select из хранимки.
← →
12 © (2010-09-15 13:30) [9]
> я дал код, который работает.
> create procedure a
> as
> begin
> select 1
> end
> go
>
> create table e (i int)
> insert e exec a
> select * from e
да я понял, но не
наверное, я что то не так думаю, изначально..
← →
Дмитрий Тимохов (2010-09-15 13:55) [10]
> наверное, я что то не так думаю, изначально..
видимо )
ты задачу лучше опиши
← →
12 © (2010-09-15 15:41) [11]да даже сказать не могу уже
спроектировано неверно, вероятнее всего, или надо автора из отпуска дождаться - пусть пояснит логику.
суть в том, что в oracle есть таблица, из нее надо достать distinct столбец, и пробежаться. И каждое значение подставить в sp на mssql
будет много таблиц в итоге.
их надо join и взять общую
или надо еще раз подумать :)
← →
Дмитрий Тимохов (2010-09-15 15:46) [12]1. получаешь distinct значения во временную таблицу 1.
2. бежишь циклом (думаю, умеешь?)
3. для каждого значения из таблицы 1 выполняешь процедуру, результат во временную таблицу 2.
4. содержимое из 2 ДОБАВЛЯЕШЬ во временную таблицу 3.
5. очищаешь 2.
6. идешь на шаг 3.
результат - таблица 3
← →
12 © (2010-09-15 15:59) [13]да это понятно..
не нравится только. вот такое ощущение, что неправильно что-то
но спасибо, на крайняк так и сделаю
← →
Дмитрий Тимохов (2010-09-15 16:01) [14]нормально это
от объемов, конечно, зависит.
← →
Ega23 © (2010-09-15 16:09) [15]
> вот такое ощущение, что неправильно что-то
Решение как решение
Страницы: 1 вся ветка
Форум: "Прочее";
Текущий архив: 2010.12.26;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.003 c