2012-09-05 2 views
3

오픈 쿼리 구문을 사용하여 연결된 서버에서 데이터를 읽습니다.오픈 쿼리 사용 중 연결된 서버 테이블 및 SQL Server 테이블에 가입하는 방법

SELECT * FROM OPENQUERY(LinkServer, 'SELECT * FROM Product') 

최종 결과를 얻으려면이 링크 서버 테이블을 SQL 서버 테이블에 가입시키고 싶습니다. 지금은 임시 테이블을 가지고 있습니다.

SELECT * 
INTO #Temp_Products 
FROM OPENQUERY(TREPO, 'SELECT ID, Name FROM Products') 

SELECT * FROM #TEMP_PRODUCTS A 
INNER JOIN ORDERED_PRODUCTS B 
ON A.ID = B.ID 

그러나 링크 서버 제품 테이블에는 거대한 레코드가 포함되어 있으므로 임시 테이블을 채우는 데 시간이 걸립니다. 따라서 모든 제품 정보를 가져 오는 대신, 두 테이블을 모두 조인하면 성능이 향상 될 수 있습니다.

이 작업을 수행 할 수 있습니까? 누군가 도울 수 있습니까?

+0

저장 프로 시저를 작성하고 연결된 서버에 적용 해보십시오. 다른 서버에서 저장 프로 시저를 호출하고 그 결과를 테이블 변수 (DECLARE vTable Table)에 전달합니다. 그런 다음 결과 세트가 줄어들뿐만 아니라 속도를 높이는 방법으로 저장 프로 시저에 대한 캐시 된 실행 계획의 기능을 사용할 수 있습니다. 테이블 변수에 조인하는 것은 주로 임시 테이블에 조인하는 것과 동일한 프로세스입니다. – EastOfJupiter

+0

링크 서버를 제어 할 권한이 없습니다. 해당 서버에 SP를 만들 수 없습니다. – Muthukumar

+0

SELECT * FROM OPENQUERY (TREPO, 'ID ID, 제품 이름') A INNER JOIN ORDERED_PRODUCTS B ON A.ID = B.ID 시도하십시오 – Sankara

답변

13

나는 이것을 테스트 할 수있는 능력이없는,하지만 (예 : 연결이 가능한 경우)

여기
SELECT A.* 
    FROM OPENQUERY(TREPO, 'SELECT ID, Name FROM Products') A 
INNER 
    JOIN ORDERED_PRODUCTS B 
    ON A.ID = B.ID 

가 직접적 원격 서버에 가입하여 #tempTable 옵션을 우회 할 수있는 기회를 제공하지 않습니다 연결된 서버 쿼리에 대한 일부 정보 링크 및 발생할 수있는 몇 가지 함정 : http://sqlblog.com/blogs/linchi_shea/archive/2009/11/06/bad-database-practices-abusing-linked-servers.aspx

+3

@ Muthukumar, 당신은 성능 향상을 눈치 챘나요? 결과 집합은 어떻습니까? – EastOfJupiter