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中文网其他相关文章!