MS-SQL LinkedServer 연결 후 데이터를 조회를
SELECT TOP 100 intOrderNum FROM linkDB_Server_TO_JP.adprintNewDB.dbo.tblOrderItem
[실행]
SELECT TOP 100 id FROM [linkDB_Server_XX].[DB].[dbo].[OrderItem]
[결과]
분산 쿼리에서 Xml 데이터 형식을 사용할 수 없습니다. 원격 개체 'linkDB_Server_XX.DB.dbo.OrderItem'에 xml 열이 있습니다.
라고 Error가 뜹니다.
실제 해당 DB에는 xml형식의 데이터가 존재하고 있고 이를 어쩌나 구글링 한 결과! OPENQUERY를 사용을 하면서 이를 해결하였습니다.
[실행]
SELECT TOP 100 * FROM OPENQUERY([linkDB_Server_XX],'SELECT TOP 3 id FROM [DB].[dbo].[OrderItem]')
[결과]
1
2
3
또 컬럼중에 xml형식 데이터가 있을 때,
SELECT CAST(strWorkMemo AS XML) strWorkMemo
FROM OPENQUERY([linkDB_Server_XX], 'SELECT CAST(b.strWorkMemo AS NVARCHAR(max)) strWorkMemo FROM [Test].[dbo].tbl')
위와 같이 해주니까 해결.
[참고]
Linked Server를 이용한 DML 실행
Server.Data.base.owner.Object로 구성된 Fully Qualified Name을 사용하거나 OPENQUERY를 이용하는 방법이 있다.
1. Fully Quanlified Name
- Object를 명시할 때 Server, Database, Owner, Object를 모두 기술하는 방식이다. Linked Server를 이용해서 쿼리하고자 할 경우에는 OPENQUERY를 사용하지 않고 Fully Qualified Name를 이용한다.
- 한편 기술적으로 Fully Qualified Name는 OPENQUERY보다 사용하기 간편하나, 수행에 필요한 정보를 얻기 위해 메타데이터를 조회하는 양은 OPENQUERY가 적다.
2. OPENQUERY
- SELECT문을 필요한 컬럼만 나열할 수 있다.
- WHERE절도 같이 기술해서 로컬로 가져오는 데이터량을 줄일 수 있다.
※ 따라서 Fully Qualified Name을 사용하는 것보다 성능 면에서 유리하고 개선도 쉽다.
참고사이트 : http://www.dator.co.kr/hjkim/91461
'프로그래밍 > MSSQL' 카테고리의 다른 글
LinkedServer 프로시저 실행 시 RPC 구성하기 (0) | 2018.05.15 |
---|---|
오류해결 - has no value!! (0) | 2018.05.15 |
다른 네트워크 DB 서버를 조회하기 위한 방법 - Linked Server (0) | 2018.05.08 |
[mssql] cache, session 확인 및 제거 (0) | 2017.09.27 |
MS SQL - 트랜잭션 로그가 'LOG_BACKUP'(으)로 인해 꽉 찼습니다. (0) | 2016.10.05 |