2012-10-23 35 views
0

我們目前需要將金融交易引入預算數據庫以進行報告。目前,我們抓取所有財務記錄(慢速查詢),然後抓取所有預算。然後,我們進行合併連接,將財務記錄過濾到僅包含預算的財務記錄。做到這一點的理想方法是首先獲取所有預算,然後將其提供給另一個組件,然後生成一個只提取所需事務的查詢。在SSIS中過濾源組件

實施例:

TableADatabaseA有標識列稱爲FakeId

TableB in DatabaseB具有相同的標識列;但是,TableB不具有與TableA的一對一映射。相反,「映射」(如果存在的話)將是一比零或一。我們要抓取TableA,DatabaseA的所有財務記錄,其中FakeId位於TableB,DatabaseB

我們不能在這兩個SQL服務器之間創建鏈接服務器,所以做一個SELECT * FROM TableA WHERE FakeId IN (SELECT FakeId FROM DatabaseB.TableB)將不起作用。

感謝, 保羅

+0

投票移動,這是更適合dba.stackexchange.com – Kermit

+0

什麼版本的SQL Server-2005或2008+? – billinkc

+0

對不起。我應該包括這一點。 2008 R2。 – eccsolutions

回答

2

正如你所說,您可以使用兩個源並使用合併連接轉換將它們連接起來。

另一種(更多數據倉庫導向)解決方案是將兩個表複製到單獨的數據庫(通常稱爲暫存區),然後使用您提出的查詢的變體在數據庫級別執行邏輯。該解決方案還允許您實施索引和其他性能增強技術來優化集成。

+0

這是有道理的。複製整個表格通常比複雜的查詢要少。然後我們可以優化並做適當的連接。謝謝! – eccsolutions

1

如果你可以使用SSIS,我想你可以使用 '查找' 組件:

實現查找邏輯在SQL Server集成服務 http://www.simple-talk.com/sql/ssis/implementing-lookup-logic-in-sql-server-integration-services/

+0

這與我正在尋找的東西非常接近。我遇到的問題是,輸入只帶回2條記錄(預期)。當輸入提供給查找查詢時,SQL返回18條記錄,但查找只返回2(不是預期的)。我不需要匹配的行數。查找需要退回輸入列匹配的所有事務(1到很多不是1到1)。 – eccsolutions