我很清楚 MS SQL Server 不允许在 OPENQUERY 语句中使用变量,并且我知道解决方法。
我想知道的是,有谁知道为什么不允许使用变量或连接字符串?
这导致人们跳过的箍简直令人震惊,而且它与 EXEC 等其他功能不符。
任何人都可以对此发表评论吗?我必须在 MS 贿赂谁才能解决他的问题?
我很清楚 MS SQL Server 不允许在 OPENQUERY 语句中使用变量,并且我知道解决方法。
我想知道的是,有谁知道为什么不允许使用变量或连接字符串?
这导致人们跳过的箍简直令人震惊,而且它与 EXEC 等其他功能不符。
任何人都可以对此发表评论吗?我必须在 MS 贿赂谁才能解决他的问题?
该限制是由 SQL Server 中实现链接服务器的方式及其依赖库的工作方式引起的。有一整套用于传递 SQL 命令的库,它们都有不同的可变大小和缓存大小。OCBC 驱动程序本身存在一些限制,因此 8k 是 Microsoft 的安全选择。不允许您传递变量只会强制执行 8k 限制规则。
declare @v1 varchar(max)
EXEC('SELECT * FROM OPENQUERY (<linkedserver>, ''SELECT * FROM <table> WHERE <column> = ''''' + @v1 + ''''''')')