首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >SQL Server空间服务器和链接服务器

SQL Server空间服务器和链接服务器
EN

Stack Overflow用户
提问于 2011-03-12 05:53:48
回答 3查看 22.6K关注 0票数 23

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

分布式查询中不允许公开具有CLR类型的列的

对象。请使用直通查询来访问远程对象。

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

当前命令出现严重错误。如果有结果,则应将其丢弃。

有没有办法通过链接服务器查询包含空间类型的表?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-03-12 06:25:43

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

代码语言:javascript
复制
select go=geometry::STGeomFromText(go,0)
from openquery([other\instance],
'select go=convert(nvarchar(max),go) from tempdb.dbo.geom')

注意:go是一个列名,是geometry-object的缩写

或者使用函数而不是显式强制转换

代码语言:javascript
复制
select go=geometry::STGeomFromText(go,0)
from openquery([other\instance],
'select go=go.STAsText() from tempdb.dbo.geom')
票数 19
EN

Stack Overflow用户

发布于 2015-11-06 21:38:44

我遇到了同样的问题,但在我的情况下,接受的解决方案不是一个选项,因为许多应用程序无法更改以期望完全不同的查询。

相反,我想我找到了欺骗系统的方法。在本地服务器上运行:

代码语言:javascript
复制
CREATE VIEW stage_table
AS
SELECT *
FROM OPENQUERY([REMOTESERVER],'SELECT * FROM [REMOTEDB].[SCHEMA].TARGET_TABLE');
GO
CREATE SYNONYM TARGET_TABLE FOR stage_table;
GO

瞧,你现在可以简单地使用

代码语言:javascript
复制
SELECT * FROM TARGET_TABLE;

这可能是您的应用程序所期望的。

在本地服务器上尝试了上述方案:SQLEXPRESS2008 R2和远程服务器SQL EXPRESS 2014。

票数 17
EN

Stack Overflow用户

发布于 2013-01-26 01:32:33

我有另一个变通办法。它不适用于OP的问题,因为他们试图选择空间数据。即使您没有选择包含空间数据的列,您仍然会收到此错误。因此,如果您需要查询这样的表,并且不需要检索空间数据,那么可以为该表创建一个视图(只选择需要的列,不包括空间数据列),然后针对该视图进行查询。

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5278796

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档