이 문서에서는 연결된 서버 쿼리에 변수를 전달하는 방법을 설명합니다.
원래 제품 버전: SQL Server 온라인 설명서
원래 KB 번호: 314520
요약
연결된 서버를 쿼리할 때 , 또는 OPENDATASOURCE
문을 사용하는 통과 쿼리를 OPENQUERY
OPENROWSET
자주 수행합니다. 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
참고 항목
자세한 내용은 아래 항목을 참조하세요.