다음을 통해 공유


OPENQUERY(Transact-SQL)

지정한 연결된 서버에서 지정한 통과 쿼리를 실행합니다. 이 서버는 OLE DB 데이터 원본입니다. OPENQUERY는 테이블 이름처럼 쿼리의 FROM 절에서 참조될 수 있습니다. 또한 OPENQUERY는 INSERT, UPDATE 또는 DELETE 문의 대상 테이블로 참조될 수도 있습니다. 이것은 OLE DB 공급자 기능에 종속됩니다. 쿼리는 여러 결과 집합을 반환할 수 있지만 OPENQUERY는 첫 번째 것만 반환합니다.

항목 링크 아이콘Transact-SQL 구문 표기 규칙

구문

OPENQUERY ( linked_server ,'query' )

인수

  • linked_server
    연결된 서버의 이름을 나타내는 식별자입니다.

  • 'query'
    연결된 서버에서 실행된 쿼리 문자열입니다. 문자열의 최대 길이는 8KB입니다.

주의

OPENQUERY는 변수를 인수로 받아들이지 않습니다.

OPENQUERY는 연결된 서버에서 확장 저장 프로시저를 실행하는 데 사용할 수 없습니다. 그러나 확장 저장 프로시저는 네 부분으로 된 이름을 사용하여 연결된 서버에서 실행할 수 있습니다. 예를 들면 다음과 같습니다.

EXEC SeattleSales.master.dbo.xp_msver

두 호출에 동일한 인수가 제공되는 경우에도 FROM 절의 OPENDATASOURCE, OPENQUERY 또는 OPENROWSET에 대한 호출과 업데이트의 대상으로 사용되는 이 함수들에 대한 호출은 별도로, 독립적으로 계산됩니다. 특히 이러한 호출 중 하나의 결과에 적용되는 필터 또는 조인 조건은 다른 호출의 결과에 영향을 미치지 않습니다.

사용 권한

모든 사용자가 OPENQUERY를 실행할 수 있습니다. 원격 서버 연결에 사용되는 사용 권한은 연결된 서버에 대해 정의된 설정에서 가져옵니다.

A. UPDATE 통과 쿼리 실행

다음 예에서는 예 A에서 만든 연결된 서버에 대해 UPDATE 통과 쿼리를 사용합니다.

UPDATE OPENQUERY (OracleSvr, 'SELECT name FROM joe.titles WHERE id = 101') 
SET name = 'ADifferentName';

B INSERT 통과 쿼리 실행

다음 예에서는 예 A에서 만든 연결된 서버에 대해 INSERT 통과 쿼리를 사용합니다.

INSERT OPENQUERY (OracleSvr, 'SELECT name FROM joe.titles')
VALUES ('NewTitle');

C. DELETE 통과 쿼리 실행

다음 예에서는 DELETE 통과 쿼리를 사용하여 예 3에서 삽입된 행을 삭제합니다.

DELETE OPENQUERY (OracleSvr, 'SELECT name FROM joe.titles WHERE name = ''NewTitle''');