2011-03-11 6 views
18

다른 SQL 인스턴스에 연결된 서버를 추가 한 SQL Server 인스턴스가 있습니다. 연결된 서버에서 액세스하는 테이블에 공간 유형이 포함되어 있습니다.SQL Server 공간 및 연결된 서버

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

공간 유형을 포함하는 테이블을 조회 할 수있는 방법이 있나요 : 나는 같은 쿼리 OPENQUERY를 사용하는 경우 나 다른 오류가

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

: 나는 테이블을 조회하려고 할 때 오류가 발생 연결된 서버를 통해? 이 문제를 해결하기 위해

답변

14

한가지 방법 NVARCHAR (MAX)로 공간 데이터를 전달하는

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

참고 go이 기하 객체

또는 함수 대신 사용을위한 짧은 열 이름 명시 적 캐스팅

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

, 사용 : 지리 :: STGeomFromText이 (이동, 4326) –

4

다른 해결 방법이 있습니다. 공간 데이터를 선택하려고했기 때문에 OP의 질문에는 적용되지 않습니다. 공간 데이터가 포함 된 열을 선택하지 않더라도이 오류가 발생합니다. 따라서 이러한 테이블을 쿼리해야하고 공간 데이터를 검색 할 필요가없는 경우 (공간 데이터 열을 제외하고 필요한 열만 선택하여) 테이블에 대한 뷰를 만든 다음 해당 뷰에 대해 대신 쿼리 할 수 ​​있습니다 .

11

나는 완전히 다른 쿼리를 기대하기 위해 변경할 수없는 많은 응용 프로그램 때문에 동일한 문제가 발생했지만 허용 된 솔루션이 내 경우에는 옵션이 아니 었습니다.

대신 시스템을 속이는 방법을 찾았습니다. 로컬 서버 실행에 :

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 년

+0

내가 CLR 유형과 열을 노출 '개체 발생

로컬 서버와 위의 시나리오를 시도 분산 쿼리에서는 사용할 수 없습니다. 패스 쓰루 쿼리를 사용하여 원격 객체에 접근하십시오 ': pkExec의 힌트가이 문제를 해결했습니다. – AAsk

+2

그냥 분명히하십시오. 필요한 정확한 변환은 다음과 같습니다. 'select * from [remoteservername]. [remotedatabasename]. [schemaname]. [tablename]'의 쿼리가 실패한 경우, OPENQUERY ([remoteservername], select * from [remotedatabasename] ]. [schemaname]. [tablename] ')'. 기본적으로 원격 서버 이름 (예 : 해당 도메인 이름이나 그 밖의 것이 아니라 임의의 이름)을 테이블 식별자 외부로 이동하고 openquery에 매개 변수로 전달해야합니다. – Triynko

+0

@ Triangko 내 대답은 쿼리의 형식이 "SELECT * FROM table_name"인 경우에도 적용됩니다. 주석에서 언급 한 것을 사용하면 공간 데이터 유형에 대해 쿼리가 실패합니다 (AAsk의 주석에 따라). – pkExec

관련 문제