2017-06-02 140 views
1

我需要一些建議如何解決以下任務:動態地從源服務器創建目標表與SSIS

我得到了基於IBM DB2(IBMDA400)源系統裏面有很多表,這些表應迅速改變,每日結構。我必須從DB2中將指定的表加載到MSSQL 2008 R2服務器中。所以我認爲使用SSIS是最好的選擇。

我的第一次嘗試只是添加兩個數據源,將所有表格刪除到MSSQL中,然後用「從@Table中選擇* Into @Table」重新創建它們。但我無法得到這個工作,因爲我無法連接兩個OLEDB連接。我也嘗試過使用Openrowset語句,但SQL Server不允許出於安全原因,我不允許更改它。

我的第二次嘗試是從源手動讀取表並刪除併爲每個循環重新創建表,然後通過數據流任務加載數據。但是我一直在從執行SQL任務中獲取元數據......所以我沒有獲得列名和類型。

我不敢相信這太難實現了。爲什麼數據流任務中沒有「如果不存在則創建表」複選框?

當然,我在這裏搜索了這個問題,但找不到解決方案。

由於提前, 墊

+0

那麼你可以通過從sys.objects中選擇並刪除它來檢查SQL腳本中是否存在表。這聽起來像是DBA的噩夢。如果你不知道即將到來的結構,你將如何將數據加載到SQL Server數據庫中?如果表格會一直改變,你打算如何使用這些數據? – PacoDePaco

+0

數據將與單獨的前端一起使用。我不確定你是否正確。我不會從源中刪除任何東西,我只是想將整個結構複製到sql服務器上... – Pad

+0

我做到了。我的意思是你將如何在任何應用程序中使用數據?除非它是「從...中選擇*」,否則您甚至無法查詢數據以及可怕設計的尖叫聲。通常,您將創建一個臨時數據庫,其中包含源系統中的所有數據,並在匹配數據結構後將其推送到您的OLTP數據庫。你能區分源碼中沒有改變的任何列嗎?那麼在將來你可以根據需要添加新的列。 – PacoDePaco

回答

0

這是溶液我得到在末端:

  1. 創建文件/目錄,其用於源表的選擇。
  2. 重要提示:創建你的SQL實例鏈接的服務器或工作的ConnectionString爲OPENROWSET(我沒能做到這一點 - 我選用的鏈接服務器)
  3. 查詢源文件/表
  4. 構建環通結果集
  5. 使用變量和腳本任務,以構建查詢
  6. 刪除目標表
  7. 建一個查詢字符串用INSERT INTO TABLE FROM OPENROWSET(或者如果使用鏈接服務器OPENQUERY)
  8. 執行日是陳述

完成。 正如我上面所說,我對此並不滿意,但現在應該沒問題。如果我有另一個解決方案,我會更新這個。