2010年1月5日 星期二

RS 2000 中的openquery

有一張報表需求會同時用到sql 2000和informix 的table.
採用linked server的方式,分散式查詢最好要組好完成sql語句,再送到遠端伺服器進行查詢後傳回結果.
之前使用者為了方便,把openquery的語法建成view, 像這樣
create view vTest as
select * from openquery (linkedsvr, 'select * from remoteTable")

想當然耳, 雖然查詢時 select * from vTest where condiditon.... 有指定條件,
但以openquery 來說, 可是會先把remote table所有的資料下傳回sql server後再進行處理的.
造成整個resource都被吃光了.

所以改寫成以sp_executesql的方法組出sql字串送到 remote db去查詢完成後送回結果

declare @sql as nvarchar(4000)
set @sql = N'select * into #tmpTest from openquery (linkedsvr, ''select * from remoteTabl where condition'') ;

select * from #tmpTest inner join tableInSQLServer ......'
exec sp_executesql @sql

這樣就可以利用tmp table, 一次包在同一個transaction與sql server 的table做join查詢了

雖然很不方便 ,但拿sql server當跳板做事總要犧牲一點吧.

沒有留言:

張貼留言

自動記錄滑鼠點選操作

為了一個需求,需要人工去點選幾個滑鼠的點選行為,找了幾種工具,覺得GS Auto Clicker最實用,極符合我的需求,尤其是多個固定位置的button點擊,解決了一個很耗時間的工作。 最後設定完預設hotkey F8為啟用鍵,就可以開始自動做工了。再按F8結束工作。 GS Au...