[英]SQL Server spatial and linked servers
我有一個SQL Server實例,我已經將鏈接服務器添加到另一個SQL實例。 我在鏈接服務器上訪問的表包含空間類型。 當我嘗試查詢表時,我收到一個錯誤:
在分布式查詢中不允許使用CLR類型公開列的對象。 請使用傳遞查詢來訪問遠程對象。
如果我使用相同的查詢OPENQUERY
我得到另一個錯誤:
當前命令發生嚴重錯誤。 結果(如果有的話)應該被丟棄。
有沒有辦法通過鏈接服務器查詢包含空間類型的表?
解決此問題的一種方法是將空間數據作為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和遠程服務器SQL EXPRESS 2014。
我有另一個解決方法。 它不適用於OP的問題,因為他們試圖選擇空間數據。 即使您沒有選擇包含空間數據的列,您仍會收到此錯誤。 因此,如果您需要查詢此類表,並且不需要檢索空間數據,則可以為表創建一個視圖(僅選擇所需的列,排除空間數據列),然后針對該視圖進行查詢。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.