2012-03-14 47 views
1

我有csv文件,每行都有地址和人物數據。 我想轉換這些數據: 1-將地址部分od行插入db的地址表 2-將具有FK地址列的Person表中的添加地址行的數據添加到人列中 3人表在數據庫數據中是否存在FK,如何選擇SIS轉換中存在的數據PK?插入一張桌子,並使用他們的PK插入第二張桌子作爲FK - SSIS

我有SSIS一點經驗,我想知道如何才達到這一轉變?

它可以保存地址PK在一些溫度?

+0

你能澄清無論你是插入到MS SQL Server數據庫中,如果是這樣的地址的PK IDENTITY列? – 2012-03-15 18:33:04

回答

1

可悲的是,我沒有神奇的故事,告訴你SSIS並捕獲標識值。目標組件就是目標。他們唯一的輸出是錯誤路徑。

您仍然可以使用SSIS的強大功能來解析平面文件,日誌記錄,配置等。我所見到的兩種典型模式是您將要求的A)將平面文件加載到臨時表中,然後然後使用純TSQL加載表並捕獲輸出虛擬表。 B)假定您的源數據中具有唯一標識符,然後您可以使用該標識符在源數據和目標之間創建唯一映射(查找+緩存轉換是關鍵)。雖然B的賠率很高,但我已經能夠使用這一點,每10/20進口一次,我用前一種模式進行。

1

如果你可以修改目標表,我提出以下建議:

  1. 添加序列號列的數據源。 This article可能會有所幫助。
  2. 向兩個目標表添加一列以接受序列號數據類型(無論您使用什麼)。
  3. 爲Address和Person使用單獨的數據流,確保Address首先進入。映射seq。編號欄適當。
  4. 在人員數據流中,使用查找組件對地址表使用Seq編號作爲查找的關鍵。適當填寫外鍵值。
+0

您可以在分配序號後使用多播來避免第二個數據流(和查找)。一個輸出轉到Address的目的地,第二個輸出轉到Person的目的地。 – 2012-03-16 17:22:35

0

就做,在兩個不同的數據流。

在第一次閱讀並插入Addreess部分和第二你讀的人一部分,並與剛創建的地址表中加入它(你可以使用一個查找組件,以獲得基於名稱的ID)

0

如果您可以添加一個字段,該字段不會在應用程序中顯示錶中的文件unique_id,然後在與數據的連接中使用該字段來填充子表。但是有時你不能混淆數據庫的結構,特別是如果它是COTS產品的話。

我們有一個偷偷摸摸的伎倆。首先將數據加載到臨時表(如果文件沒有唯一標識符,則添加標識)以及parent_id的空字段。

接下來把唯一標識符到一些其他必填字段,而不是其正常價值(我們使用的姓氏,但如果你有一個taht是相同的數據類型爲更好的UNIQUEID)。然後,您可以加入必要的字段和暫存表中的唯一標識符以更新它以獲取真正的標識。然後用你的實際值更新你存儲臨時ID的字段(因爲你現在可以使用真正的parent_id)。現在,您在表中擁有真正的parent_id,子表的數據流可以加入到該表中。這會爲數據庫創建更多的工作,所以只有在無法更改結構時才使用它。

另外,您可以使用存儲過程和執行SQL任務完成所有從臨時表的插入而不是在一個數據流。