將參數傳遞給 SQL Server 中的 OPENQUERY
SQL Server 的 OPENQUERY
語句在連結伺服器上執行查詢。 但是,不支援在 OPENQUERY
語句中直接嵌入參數。 微軟的文檔明確指出 OPENQUERY
不接受變數作為參數。 讓我們來探索有效的解決方法:
方法 1:硬編碼值(針對有限數量的參數)
當您只需要傳遞幾個特定值時,此方法適用。 字串連接用於建構查詢:
<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:動態查詢建構(用於更複雜的查詢或動態連結伺服器名稱)
對於更複雜的查詢或連結伺服器名稱可變的場景,動態 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中文網其他相關文章!