Подтвердить что ты не робот

Пространственные и связанные серверы SQL Server

У меня есть экземпляр SQL Server, который я добавил связанный сервер к другому экземпляру SQL. Таблица, к которой я обращаюсь на связанном сервере, содержит пространственные типы. Когда я пытаюсь выполнить запрос к таблице, я получаю сообщение об ошибке:

Объекты, отображающие столбцы с типами CLR, не разрешены в распределенных запросы. Пожалуйста, используйте сквозной запрос для доступа к удаленному объекту.

Если я использую OPENQUERY с тем же запросом, я получаю еще одну ошибку:

Серьезная ошибка произошла в текущей команде. Результаты, если таковые имеются, следует отбросить.

Есть ли способ запросить таблицы, содержащие пространственные типы через связанные серверы?

4b9b3361

Ответ 1

Один из способов обойти это - передать пространственные данные как NVARCHAR (MAX)

select go=geometry::STGeomFromText(go,0)
from openquery([other\instance],
'select go=convert(nvarchar(max),go) from tempdb.dbo.geom')

note: go - это имя столбца, сокращение от объекта geometry-object

Или используя функцию вместо явного литья

select go=geometry::STGeomFromText(go,0)
from openquery([other\instance],
'select go=go.STAsText() from tempdb.dbo.geom')

Ответ 2

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

Вместо этого, я думаю, я нашел способ обмануть систему. На локальном сервере выполните:

CREATE VIEW stage_table
AS
SELECT *
FROM OPENQUERY([REMOTESERVER],'SELECT * FROM [REMOTEDB].[SCHEMA].TARGET_TABLE');
GO
CREATE SYNONYM TARGET_TABLE FOR stage_table;
GO

Voila, теперь вы можете просто использовать

SELECT * FROM TARGET_TABLE;

Скорее всего, это то, чего ожидают ваши приложения.

Пробовал описанный выше сценарий с локальным сервером: SQLEXPRESS 2008 R2 и удаленным сервером SQL EXPRESS 2014.

Ответ 3

У меня есть другое обходное решение. Это не относится к вопросу ОП, поскольку они пытались выбрать пространственные данные. Даже если вы не выбираете столбцы, содержащие пространственные данные, вы все равно получите эту ошибку. Поэтому, если вам нужно запросить такую ​​таблицу и не нужно извлекать пространственные данные, вы можете создать представление для таблицы (выбирая только нужные столбцы, за исключением столбцов пространственных данных), а затем запрашивайте это представление вместо.