我深知MS SQL Server不允許在OPENQUERY語句中使用變量,並且我意識到了這些變通方法。爲什麼OPENQUERY不接受變量?
我想知道的是,有沒有人知道爲什麼變量或連接字符串不允許?
這使得人們跳過的箍環簡直令人震驚,它只是不符合其他功能,如EXEC。
任何人都可以對此發表評論嗎?我必須向MS賄賂以解決他的問題?
我深知MS SQL Server不允許在OPENQUERY語句中使用變量,並且我意識到了這些變通方法。爲什麼OPENQUERY不接受變量?
我想知道的是,有沒有人知道爲什麼變量或連接字符串不允許?
這使得人們跳過的箍環簡直令人震驚,它只是不符合其他功能,如EXEC。
任何人都可以對此發表評論嗎?我必須向MS賄賂以解決他的問題?
該限制是由鏈接服務器在SQL Server中實現的方式以及其依賴庫的工作方式引起的。有一整串庫用來傳遞你的SQL命令,它們都有不同的變量大小和緩存大小。其中一些限制是在OCBC司機本身,所以8k是來自微軟的安全賭注。不允許你傳遞變量只是強制執行8k限制規則。
declare @v1 varchar(max)
EXEC('SELECT * FROM OPENQUERY (<linkedserver>, ''SELECT * FROM <table> WHERE <column> = ''''' + @v1 + ''''''')')
這不是對「爲什麼?」這個問題的回答,但它是一個很好的解決方法! – RubyTuesdayDONO 2012-10-12 17:56:09
除非你想把結果放到表變量中 – zeocrash 2014-08-27 15:42:21
有趣。雖然我不明白他們爲什麼不能爲可能被截斷的字符串拋出錯誤。由於缺乏變量而失去的好處肯定會超出靜態的長度執行方式。這是假設這是他們當然不允許他們的原因。我仍然不介意MS發表評論。 – Andrew 2009-11-12 09:08:29