2009-11-11 106 views
2

我深知MS SQL Server不允許在OPENQUERY語句中使用變量,並且我意識到了這些變通方法。爲什麼OPENQUERY不接受變量?

我想知道的是,有沒有人知道爲什麼變量或連接字符串不允許?

這使得人們跳過的箍環簡直令人震驚,它只是不符合其他功能,如EXEC。

任何人都可以對此發表評論嗎?我必須向MS賄賂以解決他的問題?

回答

2

該限制是由鏈接服務器在SQL Server中實現的方式以及其依賴庫的工作方式引起的。有一整串庫用來傳遞你的SQL命令,它們都有不同的變量大小和緩存大小。其中一些限制是在OCBC司機本身,所以8k是來自微軟的安全賭注。不允許你傳遞變量只是強制執行8k限制規則。

+0

有趣。雖然我不明白他們爲什麼不能爲可能被截斷的字符串拋出錯誤。由於缺乏變量而失去的好處肯定會超出靜態的長度執行方式。這是假設這是他們當然不允許他們的原因。我仍然不介意MS發表評論。 – Andrew 2009-11-12 09:08:29

2
declare @v1 varchar(max) 

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

這不是對「爲什麼?」這個問題的回答,但它是一個很好的解決方法! – RubyTuesdayDONO 2012-10-12 17:56:09

+0

除非你想把結果放到表變量中 – zeocrash 2014-08-27 15:42:21