我正在將數據從舊數據庫遷移到SSIS(2008 R2企業版)中的新數據庫。在舊數據庫中,我有一個名爲[Financial]
的表和一個名爲:[Installments]
的列。此欄中有一個數字值:1,2,3或4.這些是分期付款。舊數據庫僅存儲此數值,不提供有關各個分期付款的更多信息。但是,新的數據庫提供了更多關於每個批次的信息,其中包含以下列:[InstallmentPaid]
(如果客戶支付分期付款),[DateInstallmentPaid]
(當客戶支付分期付款時),[InstallmentNumber]
(這對於指定它的分期付款編號很重要。客戶需要分4次付款,然後創建4條記錄,其中1個是InstallmentNr1,其次是InstallmentNr2,第三個是InstallmentNr3,第四個是InstallmentNr4),當然還有[InstallmentPrice]
。基於記錄值的插入操作的SSIS數
因此,舊數據庫的表[Financial]
與列[Installments]
。新的數據庫具有相同的[Financial]
表,但不是有一個叫[Installments]
列,它有一個新的關係稱爲[CustInstallments]
([CustInstallments]
有FK FinancialID
(1對多的關係)
所以現在我正在遷移數據從舊數據庫到新的一個,我不想失去約分期付款額的信息下面的邏輯應該在SSIS爲了防止信息丟失執行:
Foreach [Installments] in [Financial] from the old database, insert a new [CustInstallment] referencing to the corresponding [FinancialID] within the new database
所以,如果在舊數據庫[分期付款]中的數值是3,那麼我需要INSERT INTO CustInstallments (FinancialID, InstallmentNumber) VALUES (?, ?)
這?
sh第一次插入時應爲1,第二次爲2,第三次爲3。所以我需要一些循環?這甚至可以在SSIS的數據流中進行嗎?
下面的可視化(圖)和我的流量描述到目前爲止。
- 我選擇舊的數據庫源
[Financial]
- 我轉換數據,因此當前數據庫中的數據類型相匹配
- 因爲我已經遷移的舊
[Financial]
數據庫中的數據到新的一個,我可以用查找在新數據庫的FinancialID's
上,因此INSERT查詢的第一個變量?
可以鏈接到查找輸出。 - 我將所有可能性分開,例如分期付款包含NULL,1,2,3或4時。
- 第五步是我正在尋找的。一些線索,一些有用的東西方向。當NumberOfInstallments爲1時,我需要
INSERT INTO CustInstallments (FinancialID, InstallmentNumber) VALUES (?, ?)
,第二個?
變量爲1.當NumberOfInstallments爲2時,則需要執行兩個插入,一個使用InstallmentNumber 1,另一個使用InstallmentNumber 2.當NumberOfInstallmentNumber爲3時,則3個插入計數NumberOfInstallmentNumber。當4時,然後4。
有沒有什麼聰明的方法來實現這個目標?是否有任何我不知道的SSIS的內置函數可用?
我很欣賞這裏的任何輸入!
謝謝。
編輯2014年10月2日
我曾嘗試下面的代碼:
INSERT INTO CustInstallments (FinancialID, InstallmentNumber) values (?, X);
WITH nums AS(select top 4 row_number() over (order by (select 1)) AS id
from sys.columns
) SELECT f.* FROM CustInstallments f
JOIN nums n on f.InstallmentNumber>= n.id
但此查詢不創建的記錄X-量,相反, JOIN nums只是將其複製X次,所以我仍然無法單獨跟蹤每個安裝。
我寫我自己的代碼 - 土氣了我一段時間,因爲我從來沒有與TSQL的工作 - 這就像在SQL Server中的魅力:
DECLARE @MyCounter tinyint;
SET @MyCounter = 1;
WHILE (SELECT COUNT(*) FROM CustInstallments WHERE FinancialID = #ID) < 4
BEGIN
INSERT INTO CustInstallments (FinancialID, InstallmentNumber) VALUES (#ID, @MyCounter)
IF (SELECT COUNT(*) FROM CustInstallments) > 4
BREAK
ELSE
SET @MyCounter = @MyCounter +1;
CONTINUE
END
現在在SSIS中,我無法改變#ID到?
-variable,並使用查找FinancialID,因爲只要我做,我得到以下錯誤:
任何人都可以解釋我爲什麼SSIS不也是這樣嗎?
編輯2014年10月2日
我最後和最可取的選擇是使用多播投次插入查詢X量,其中各X是一個OLE DB命令。例如,當有3 [分期付款]在舊列,我想創建與3級OLE DB的命令的多播,與他們的SqlCommand
:
OLE DB Command 1: INSERT INTO CustInstallments (FinancialID, InstallmentNumber) values (?, 1);
OLE DB Command 2: INSERT INTO CustInstallments (FinancialID, InstallmentNumber) values (?, 2);
OLE DB Command 3: INSERT INTO CustInstallments (FinancialID, InstallmentNumber) values (?, 3);
這是難看的方法,但用數據的量小我正在使用,也許這不是什麼大問題。
這是真的,查詢不是真的插入4個人的記錄,但只是複製原來的?我需要創建4個插入。我編輯了我的問題來解釋我遇到的其他問題。 – 2014-10-02 11:16:39
對不起,我的例子不清楚。請參閱編輯。 – 2014-10-03 15:59:24