Действительно ли возможно составить временную таблицу на связанном сервере?

Я делаю некоторые довольно сложные запросы против удаленного связанного сервера, и было бы полезно смочь хранить некоторую информацию во временных таблицах и затем выполнить соединения против него - все с удаленными данными. Составление временных таблиц локально и присоединение против них по проводу являются непомерно медленными.

Действительно ли возможно вынудить временную таблицу быть созданной на удаленном сервере? Предположите, что у меня нет необходимых полномочий для создания моих собственных реальных (постоянных) таблиц.

8
задан Herb Caudill 5 February 2010 в 18:53
поделиться

2 ответа

Невозможно напрямую создавать временные таблицы на связанном удаленном сервере. Фактически, вы не можете использовать DDL против связанного сервера.

Для получения дополнительной информации о правилах и ограничениях использования связанных серверов см .:

Рекомендации по использованию распределенных запросов (электронная документация по SQL 2008).

Одно решение (и вне моей головы, и это только работать, если у вас были разрешения на удаленном сервере) вы могли бы:

  • на удаленном сервере иметь хранимую процедуру, которая будет создавать постоянную таблицу с именем, основанным на параметре IN
  • удаленная хранимая процедура будет запускать запрос затем вставьте результаты в эту таблицу
  • Затем вы выполните локальный запрос к этой таблице, выполните любые соединения с любыми необходимыми локальными таблицами
  • Вызовите другую хранимую процедуру на удаленном сервере, чтобы удалить удаленную таблицу, когда вы закончите

Не идеальный, но возможный обходной путь.

2
ответ дан 5 December 2019 в 17:37
поделиться

Это работает из SQL 2005 SP3, связанного с SQL 2005 SP3 в моей среде. Однако, если вы проверите tempdb, вы обнаружите, что таблица фактически находится в локальном экземпляре, а не в удаленном экземпляре. Я видел это как решение на других форумах и хотел увести вас от этого.

create table SecondServer.#doll
(
  name varchar(128)
)
GO
insert SecondServer.#Doll
select name from sys.objects where type = 'u'


select * from SecondServer.#Doll
4
ответ дан 5 December 2019 в 17:37
поделиться
Другие вопросы по тегам:

Похожие вопросы: