연결된 서버 쿼리에 변수 전달

이 문서에서는 연결된 서버 쿼리에 변수를 전달하는 방법을 설명합니다.

원래 제품 버전: 온라인 SQL Server 설명서
원본 KB 번호: 314520

요약

연결된 서버를 쿼리할 때 , OPENROWSET또는 OPENDATASOURCE 문을 사용하는 통과 쿼리를 OPENQUERY자주 수행합니다. SQL Server 온라인 설명서의 예제를 확인하여 미리 정의된 Transact-SQL 문자열을 사용하여 이 작업을 수행하는 방법을 확인할 수 있지만 이러한 함수에 변수를 전달하는 방법에 대한 예제는 없습니다. 이 문서에서는 연결된 서버 쿼리에 변수를 전달하는 방법에 대한 세 가지 예제를 제공합니다.

통과 함수 중 하나에 변수를 전달하려면 동적 쿼리를 빌드해야 합니다.

따옴표를 포함하는 모든 데이터에는 특정 처리가 필요합니다.

기본 값 전달

기본 Transact-SQL 문을 알고 있지만 하나 이상의 특정 값을 전달해야 하는 경우 다음 샘플과 유사한 코드를 사용합니다.

DECLARE @TSQL varchar(8000), @VAR char(2)
SELECT @VAR = 'CA'
SELECT @TSQL = 'SELECT * FROM OPENQUERY(MyLinkedServer,''SELECT * FROM pubs.dbo.authors WHERE state = ''''' + @VAR + ''''''')'
EXEC (@TSQL)

전체 쿼리 전달

전체 Transact-SQL 쿼리 또는 연결된 서버의 이름(또는 둘 다)을 전달해야 하는 경우 다음 샘플과 유사한 코드를 사용합니다.

DECLARE @OPENQUERY nvarchar(4000), @TSQL nvarchar(4000), @LinkedServer nvarchar(4000)
SET @LinkedServer = 'MyLinkedServer'
SET @OPENQUERY = 'SELECT * FROM OPENQUERY('+ @LinkedServer + ','''
SET @TSQL = 'SELECT au_lname, au_id FROM pubs..authors'')'
EXEC (@OPENQUERY+@TSQL)

Sp_executesql 저장 프로시저 사용

다중 계층 따옴표를 방지하려면 다음 샘플과 유사한 코드를 사용합니다.

DECLARE @VAR char(2)
SELECT @VAR = 'CA'
EXEC MyLinkedServer.master.dbo.sp_executesql
N'SELECT * FROM pubs.dbo.authors WHERE state = @state',
N'@state char(2)',
@VAR

참고 항목

자세한 내용은 아래 항목을 참조하세요.