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

Откуда: Москва
Сообщений: 1139
День добрый,

Есть простенький запрос:
DECLARE @MY_VAR NVARCHAR(max);
SET @MY_VAR = 
'
SELECT *
FROM  OPENQUERY(POSTGRES, ''SELECT * FROM public."repApp_SomeTableName" WHERE date > ''''2012-11-01'''' '') AS repApp_MyNewTableName

';

EXECUTE (@MY_VAR);


Мне надо сделать Join на результат выполнения EXECUTE. Это возможно?
Задача состоит в том, чтобы динамически формировать запрос у удаленному серверу. В данном случае требуется менять дату, а затем делать Join на результат выполнения запроса.
20 ноя 12, 15:56    [13501415]     Ответить | Цитировать Сообщить модератору
 Re: Join на результат выполнения команды execute  [new]
inner join
Guest
Gena928
День добрый,

Есть простенький запрос:
DECLARE @MY_VAR NVARCHAR(max);
SET @MY_VAR = 
'
SELECT *
FROM  OPENQUERY(POSTGRES, ''SELECT * FROM public."repApp_SomeTableName" WHERE date > ''''2012-11-01'''' '') AS repApp_MyNewTableName
inner join tbl t on repApp_MyNewTableName.id = t.id
';

EXECUTE (@MY_VAR);


Мне надо сделать Join на результат выполнения EXECUTE. Это возможно?
Задача состоит в том, чтобы динамически формировать запрос у удаленному серверу. В данном случае требуется менять дату, а затем делать Join на результат выполнения запроса.

?
20 ноя 12, 16:01    [13501480]     Ответить | Цитировать Сообщить модератору
 Re: Join на результат выполнения команды execute  [new]
trew
Member

Откуда: Москва
Сообщений: 2646
Gena928,

SELECT 'пример' + @str + 'конкатенации для даты'  


Почему сразу не писать
SELECT * FROM  OPENQUERY
, зачем нужен динамический запрос ?
20 ноя 12, 16:03    [13501507]     Ответить | Цитировать Сообщить модератору
 Re: Join на результат выполнения команды execute  [new]
Gena928
Member

Откуда: Москва
Сообщений: 1139
inner join,
да, тоже вариант, спасибо.
20 ноя 12, 16:03    [13501510]     Ответить | Цитировать Сообщить модератору
 Re: Join на результат выполнения команды execute  [new]
inner join
Guest
trew
Gena928,

SELECT 'пример' + @str + 'конкатенации для даты'  


Почему сразу не писать
SELECT * FROM  OPENQUERY
, зачем нужен динамический запрос ?

в OPENQUERY, ЕМНИП, нельзя использовать переменные, только константы, и единственный способ использовать параметры (в случае ТС это дата) генерить "динамику в динамике"
20 ноя 12, 16:22    [13501726]     Ответить | Цитировать Сообщить модератору
 Re: Join на результат выполнения команды execute  [new]
Lavrov_Yura
Member

Откуда:
Сообщений: 34
можно пихать, например, во временную таблицу, а потом джойнить с ней.
'SELECT * into #qqq FROM  OPENQUERY ...'
20 ноя 12, 16:29    [13501796]     Ответить | Цитировать Сообщить модератору
 Re: Join на результат выполнения команды execute  [new]
Гость333
Member

Откуда:
Сообщений: 3683
Lavrov_Yura,

"Потом" — это когда? При выходе из scope временная таблица уничтожается. То есть вне динамического запроса вы таблицу #qqq не увидите.
20 ноя 12, 16:55    [13502067]     Ответить | Цитировать Сообщить модератору
 Re: Join на результат выполнения команды execute  [new]
Andret
Member

Откуда: Киев
Сообщений: 84
Ну так:

1. создайте временную таблицу
2. заполните временную таблицу из OPENQUERY
3. используйте временную таблицу c JOIN
20 ноя 12, 17:12    [13502230]     Ответить | Цитировать Сообщить модератору
 Re: Join на результат выполнения команды execute  [new]
Lavrov_Yura
Member

Откуда:
Сообщений: 34
согласен. а можно не во временную, а потом удалить её.
21 ноя 12, 08:57    [13504762]     Ответить | Цитировать Сообщить модератору
 Re: Join на результат выполнения команды execute  [new]
Гость333
Member

Откуда:
Сообщений: 3683
Lavrov_Yura
согласен. а можно не во временную, а потом удалить её.

Это совсем какое-то печальное решение.
— Нужно будет генерировать уникальные имена таблиц, чтобы не пересечься при работе в параллельных сессиях;
— Соответственно все запросы, обращающиеся к этим таблицам, должны быть динамическими;
— Нужно будет создать некий скрипт, подчищающий "осиротевшие" таблицы (когда таблица создана, но не успела удалиться, т.к. отвалилась коннекция), и засунуть его, например, в джоб. Скрипт должен будет как-то различать "осиротевшие" таблицы от используемых.

Лучше уж временные таблицы, чем такой квадратный лисапед.
21 ноя 12, 09:20    [13504815]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить