OPENQUERY 中的參數傳遞:一種解法
SQL Server 的 OPENQUERY
指令有助於查詢連結伺服器。 但是,不支援直接將變數作為參數傳遞。 本文概述了有效的解決方法。
參數化查詢的方法
儘管有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。 傳遞整個查詢:
此方法非常適合需要動態決定整個 T-SQL 查詢或連結伺服器名稱(或兩者)的場景:
<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;</code>
透過採用這些技術,開發人員可以成功地將參數化查詢與 OPENQUERY
結合起來,克服其固有的限制。 選擇最適合您的特定需求和查詢複雜性的方法。
以上是如何在 SQL Server 中向 OPENQUERY 傳遞參數?的詳細內容。更多資訊請關注PHP中文網其他相關文章!