매개변수가 있는 SQL Server OPENQUERY: 해결 방법
SQL Server의 OPENQUERY
은 연결된 서버에서 쿼리를 실행하지만 인수 내의 변수를 직접 사용하는 것은 지원되지 않습니다. 이를 위해서는 매개변수 전달에 대한 해결 방법이 필요합니다.
방법 1: 문자열 연결을 통해 단순 값 전달
특정 값이 필요한 간단한 쿼리의 경우 문자열 연결이 포함된 동적 SQL이 실행 가능한 솔루션입니다.
<code class="language-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);</code>
방법 2: 전체 쿼리를 문자열로 전달
이 접근 방식을 사용하면 전체 쿼리 또는 연결된 서버 이름까지 동적으로 전달할 수 있습니다.
<code class="language-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);</code>
방법 3: 보다 깔끔한 매개변수 처리를 위해 sp_executesql 사용
복잡한 중첩 인용을 피하려면 sp_executesql
:
<code class="language-sql"> 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; ``` This method offers improved readability and reduces the risk of SQL injection vulnerabilities compared to string concatenation. Note that you're executing `sp_executesql` on the linked server itself. Choose the method that best suits your query complexity and preference for code clarity. Remember to prioritize security and avoid SQL injection vulnerabilities when using dynamic SQL.</code>
위 내용은 SQL Server의 OPENQUERY에 매개 변수를 어떻게 사용할 수 있나요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!