Sql server 为什么OPENQUERY不接受变量?

Sql server 为什么OPENQUERY不接受变量?,sql-server,openquery,Sql Server,Openquery,我很清楚MS SQL Server不允许在OPENQUERY语句中使用变量,我也知道解决方法 我想知道的是,有人知道为什么不允许使用变量或串联字符串吗 这让人们跃跃欲试,这简直令人震惊,而且它与EXEC等其他功能不符 有人能对此发表评论吗?我要贿赂谁才能解决他的问题 限制是由SQL Server中链接服务器的实现方式及其依赖库的工作方式造成的。有一个完整的库链用于传递SQL命令,所有库都有不同的变量大小和缓存大小。一些限制存在于OCBC驱动程序本身,因此8k是微软的安全赌注。不允许传递变量只会强

我很清楚MS SQL Server不允许在OPENQUERY语句中使用变量,我也知道解决方法

我想知道的是,有人知道为什么不允许使用变量或串联字符串吗

这让人们跃跃欲试,这简直令人震惊,而且它与EXEC等其他功能不符


有人能对此发表评论吗?我要贿赂谁才能解决他的问题

限制是由SQL Server中链接服务器的实现方式及其依赖库的工作方式造成的。有一个完整的库链用于传递SQL命令,所有库都有不同的变量大小和缓存大小。一些限制存在于OCBC驱动程序本身,因此8k是微软的安全赌注。不允许传递变量只会强制执行8k限制规则。

declare@v1 varchar(max)
declare @v1 varchar(max)

EXEC('SELECT * FROM OPENQUERY (<linkedserver>, ''SELECT * FROM <table> WHERE <column> = ''''' + @v1 + ''''''')')
EXEC(“从OPENQUERY中选择”(“从其中选择”+@v1+))
很有趣。虽然我不明白为什么他们不能为可能被截断的字符串抛出错误。缺少变量所带来的好处肯定超过了长度强制执行的静态方法。这是假设这是他们不允许的原因。我仍然不介意微软的人对此发表评论。这不是对“为什么”问题的回答,但这是一个很好的解决办法!除非您想将结果放入一个表variable中,否则不会回答这个问题。变通是一种技巧