2017-10-21 90 views
0

我有一個名爲table1的源表,它每晚都用新數據填充。我必須上傳4個關係表tblCus, tblstore, tblEmp, tblExp中的數據。我應該使用存儲過程還是觸發器來實現? 謝謝將源表中的數據加載到多個表中

+0

SSIS將是這個 – Harry

+0

一個很好的工具,您可以爲此創建計劃作業。 –

+1

創建一個工作並在裏面添加你的scritpn –

回答

0

在SQL Server中,永遠有不止一種方式來皮膚貓。從你的問題中,我假設你正在將來自OLTP風格數據庫的4個表格非規範化爲數據倉庫風格應用程序中的單個維度。

如果數據庫位於單獨的實例上,或者只需要簡單轉換,則可以使用SSIS(SQL Server Integration Services)。

如果這是正確的,並且數據庫駐留在同一實例上,那麼您可以使用存儲過程。

如果轉換是更大負載的一部分,那麼可以合併這兩種方法,並使用SSIS編排轉換,但只需在控制流中關閉存儲過程即可。

我用來決定是否應該使用數據流或存儲過程進行特定轉換的一般規則是:數據流是我的預設,但是如果我需要數據流中的任何異步轉換,我恢復到存儲過程。這個通用規則通常給出了最佳的性能特徵。

我會避免觸發器,特別是如果針對4個表有大量的DML操作,因爲每次修改都會觸發觸發器並可能導致性能下降。

+0

謝謝,皮特這非常有幫助。 – Ashraf

+0

@Ashraf如果它對你有幫助,請不要忘記註冊和/或接受。謝謝。 –

0

如果它是一個簡單的負載,可以使用DataFlow Tasktable1.

假設表1是你的源表中選擇你的4個表。

然後你可以使用一個Conditional split task它的作用就像一個where子句,在這裏你可以設置你的定義爲tblCus, tblstore, tblEmp, tblExp,然後添加4個目的地這些。

看我的例子: Entire package

有條件拆分: Conditional split

+0

如果您不知道如何過濾它,也可以爲每個表編寫一個存儲過程,然後在執行存儲過程的ssis中創建4個執行SQL任務。有很多方法可以做到這一點:) – plaidDK

+0

感謝您花時間提供答案。這是因爲像我們這樣有幫助的同伴能夠一起學習 – Ashraf