Добро пожаловать в форум, Guest >> Войти | Регистрация | Поиск | Правила | | В избранное | Подписаться | ||
Все форумы / Microsoft SQL Server |
![]() ![]() |
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] Ответить | Цитировать Сообщить модератору |
inner join
Guest |
? |
||
20 ноя 12, 16:01 [13501480] Ответить | Цитировать Сообщить модератору |
trew Member Откуда: Москва Сообщений: 2646 |
Gena928,SELECT 'пример' + @str + 'конкатенации для даты' Почему сразу не писать SELECT * FROM OPENQUERY, зачем нужен динамический запрос ? |
20 ноя 12, 16:03 [13501507] Ответить | Цитировать Сообщить модератору |
Gena928 Member Откуда: Москва Сообщений: 1139 |
inner join, да, тоже вариант, спасибо. |
20 ноя 12, 16:03 [13501510] Ответить | Цитировать Сообщить модератору |
inner join
Guest |
в OPENQUERY, ЕМНИП, нельзя использовать переменные, только константы, и единственный способ использовать параметры (в случае ТС это дата) генерить "динамику в динамике" |
||
20 ноя 12, 16:22 [13501726] Ответить | Цитировать Сообщить модератору |
Lavrov_Yura Member Откуда: Сообщений: 34 |
можно пихать, например, во временную таблицу, а потом джойнить с ней.
'SELECT * into #qqq FROM OPENQUERY ...'
|
20 ноя 12, 16:29 [13501796] Ответить | Цитировать Сообщить модератору |
Гость333 Member Откуда: Сообщений: 3683 |
Lavrov_Yura, "Потом" — это когда? При выходе из scope временная таблица уничтожается. То есть вне динамического запроса вы таблицу #qqq не увидите. |
20 ноя 12, 16:55 [13502067] Ответить | Цитировать Сообщить модератору |
Andret Member Откуда: Киев Сообщений: 84 |
Ну так: 1. создайте временную таблицу 2. заполните временную таблицу из OPENQUERY 3. используйте временную таблицу c JOIN |
20 ноя 12, 17:12 [13502230] Ответить | Цитировать Сообщить модератору |
Lavrov_Yura Member Откуда: Сообщений: 34 |
согласен. а можно не во временную, а потом удалить её. |
21 ноя 12, 08:57 [13504762] Ответить | Цитировать Сообщить модератору |
Гость333 Member Откуда: Сообщений: 3683 |
Это совсем какое-то печальное решение. — Нужно будет генерировать уникальные имена таблиц, чтобы не пересечься при работе в параллельных сессиях; — Соответственно все запросы, обращающиеся к этим таблицам, должны быть динамическими; — Нужно будет создать некий скрипт, подчищающий "осиротевшие" таблицы (когда таблица создана, но не успела удалиться, т.к. отвалилась коннекция), и засунуть его, например, в джоб. Скрипт должен будет как-то различать "осиротевшие" таблицы от используемых. Лучше уж временные таблицы, чем такой квадратный лисапед. |
||
21 ноя 12, 09:20 [13504815] Ответить | Цитировать Сообщить модератору |
Все форумы / Microsoft SQL Server | ![]() |