2014-10-14 1 views
0

저는 SQL에 대해 상당히 익숙하며, 다른 사람들이 제가 가지고있는 문제를 도와 줄 수 있기를 바랍니다. 이 정확한 문제를 파악하는 데 도움이되는 답을 찾을 수 없었습니다.SQL 서버의 Openquery 문

두 개의 다른 서버에 두 개의 SQL Server 데이터베이스에 두 개의 테이블이 있습니다.이 두 테이블은 ItemID 열을 사용하여 비교하려고합니다. Table2에서 존재하지 않는 ItemID가있는 레코드를 Table1에서 찾고 테이블 변수에 삽입하려고합니다.

--Create table variable to hold query results 
DECLARE @ItemIDTable TABLE 
    ( 
    [itemid][NVARCHAR](20) NULL 
); 

--Query data and insert results into table variable 
INSERT INTO @ItemIDTable 
      ([itemid]) 
SELECT a.[itemid] 
FROM database1.dbo.table1 a 
WHERE NOT EXISTS (SELECT 1 
        FROM [Database2].[dbo].[table2] 
        WHERE a.itemid = [Database2].[dbo].[table2].[itemid]) 
ORDER BY itemid 

이 두 데이터베이스가 같은 서버에 테스트 서버에서 작동하지만 서로 다른 서버에있는 현실에서 : 나는 다음과 같은 코드가 있습니다. 내가 OPENQUERY를 사용하여 다음을 시도했지만, 나는 그것이 옳다는 것을 안다.

--Create table variable to hold query results 
DECLARE @ItemIDTable TABLE 
    (
    [ItemID][nvarchar](20) NULL 
    ); 

--Query data and insert results into table variable 
INSERT INTO @ItemIDTable 
    ([ItemID]) 
    SELECT a.[ItemID] 
    FROM Database1.dbo.Table1 a 
    WHERE NOT EXISTS (SELECT 1 
         FROM OPENQUERY([Server2], SELECT * FROM [Database2].[dbo].[Table2]') 
         WHERE a.ItemID = [Database2].[dbo].[Table2].[ItemID]) 
    ORDER BY ItemID 

은 내가, 내가 그것을 구조화하는 방법 단지 아주 확실하지 않다 나는 두 서버에있는 두 개의 데이터베이스가 WHERE 절에 뭔가를 할 필요가 확실 해요. 아무도 도와 줄 수 있습니까?

답변

1

외부 쿼리와 관련된 OPENQUERY를 만들 수 없습니다. 임시 테이블에 OPENQUERY의 결과를 채우고 임시 테이블에 대해 존재하지 않는 위치를 지정하거나 Synonyms을 조사 할 수 있습니다.

+0

답장을 보내 주셔서 감사합니다. 나는 당신의 제안을 사용하여 임시 테이블에 OPENQUERY 결과를 채우고 완벽하게 작동했습니다. – lunderkl041

1

OPENQUERY는 다음과 같이 작동하는 SQL 부분을 인용 한 것입니다

select * 
from openquery 
(LINKED_SERVER_NAME, 
'select query goes here' 
) 

하는 것으로. 즉, 필요한 경우 따옴표를 인용해야 할 수도 있음을 의미합니다. 예 :

select * 
from openquery 
(LINKED_SERVER_NAME, 
' 
select SomeTextField 
from SomeTable 
where SomeDateField = ''20141014'' 
' 
)