我很清楚MS SQL Server不允许在OPENQUERY语句中使用变量,我知道这些解决方法。
我想知道的是,有没有人知道WHY变量或连接字符串是不允许的?
这导致人们跳过的箍简直令人震惊,而且与EXEC等其他功能不一致。
有人可以对此发表评论吗?我是谁必须贿赂MS来解决他的问题?
答案 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 + ''''''')')