如何实现SQLServer空间和链接服务器?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (86)

我有一个SQLServer实例,我已经将一个链接服务器添加到另一个SQL实例中。我在链接服务器上访问的表包含空间类型。当我试图查询表时,我会收到一个错误:

Objects exposing columns with CLR types are not allowed in distributed queries. Please use a pass-through query to access remote object.

如果我用OPENQUERY使用相同的查询,我会得到另一个错误:

A severe error occurred on the current command. The results, if any, should be discarded.

是否有任何方法通过链接服务器查询包含空间类型的表?

提问于
用户回答回答于

解决这一问题的一种方法是将空间数据作为NVARCHAR(MAX)传递。

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

注:go是列名,是geometry-object的缩写。

或者使用函数代替显式强制转换。

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

在本地服务器上运行:

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

可以简单地用

SELECT * FROM TARGET_TABLE;

我用的是SQLEXPRESS 2008 R2和远程服务器SQLExpress 2014。

扫码关注云+社区

领取腾讯云代金券