为什么OPENQUERY不接受变量?

时间:2009-11-11 09:35:55

标签: sql-server openquery

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

我想知道的是,有没有人知道WHY变量或连接字符串是不允许的?

这导致人们跳过的箍简直令人震惊,而且与EXEC等其他功能不一致。

有人可以对此发表评论吗?我是谁必须贿赂MS来解决他的问题?

2 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分:1)

declare @v1 varchar(max)

EXEC('SELECT * FROM OPENQUERY (<linkedserver>, ''SELECT * FROM <table> WHERE <column> = ''''' + @v1 + ''''''')')