Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2010.12.26;
Скачать: CL | DM;

Вниз

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;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.009 c
2-1285455023
Германн
2010-09-26 02:50
2010.12.26
Resize формы


2-1285839434
mefodiy
2010-09-30 13:37
2010.12.26
QuickReport с юникодом для Delphi 7


15-1284728859
12
2010-09-17 17:07
2010.12.26
Шахматы. А как бы Вы сыграли?


6-1232411128
RGV
2009-01-20 03:25
2010.12.26
Чат для интернета


2-1285804432
slai
2010-09-30 03:53
2010.12.26
Таблица и строки