2017-10-13 114 views
0

我正在鏈接服務器(IBM DB2)上運行查詢,我這樣做的原因是因爲執行簡單查詢需要很長時間。下面 是兩個查詢,第一個成功地運行,因此,問題不是與查詢無法在鏈接的服務器上運行openquery

select top 10 * from [AS400TS_LNK].[TEST].[AUPRDDBF].CONTACCT where actrno = '8971' 

    select * from openquery(AS400TS_LNK, 'select * from [TEST].[AUPRDDBF].CONTACCT where actrno = ''8971''') 

和錯誤,我得到在運行打開查詢

OLE DB提供程序「DB2OLEDB」爲鏈接服務器「AS400TS_LNK」返回消息「令牌* N無效。有效令牌:* N。SQLSTATE:42601,SQLCODE:-104」。

消息7321,級別16,狀態2,行1

發生錯誤,同時準備查詢 「SELECT * FROM [AS400TS_LNK]。[測試]。[AUPRDDBF] .CONTACCT其中actrno = '8971'」針對鏈接服務器「AS400TS_LNK」的OLE DB提供程序「DB2OLEDB」執行。

+1

只是胡亂猜測這裏,但很容易測試。嘗試從'openquery'語句中刪除方括號... – user1429080

+0

正如@ user1429080所提到的,使用方括號來引用標識符是SQL Server的一件事;發送標準SQL到遠程服務器,必要時使用雙引號標識(這裏不是這種情況)。 – mustaccio

回答

1

試試這個:

select * 
from openquery(AS400TS_LNK, 'select * from TEST.AUPRDDBF.CONTACCT where actrno = ''8971''') 

或者,做不到這一點,試試這個:

select * 
from openquery(AS400TS_LNK, 'select * from TEST.AUPRDDBF.CONTACCT') 
where actrno = '8971' 
+0

非常感謝,工作!並且查詢的執行時間也很短。 – user2802027

相關問題