<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    blog.Toby

      BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理 ::
      130 隨筆 :: 2 文章 :: 150 評論 :: 0 Trackbacks

    當你把數據從其他數據庫, 或者是文本文件之類的其他數據源導入到目的數據庫時, 有時希望在導入的處理中, 能夠實現"數據存在時更新, 不存在時導入" 在之前, 一般是通過導入臨時表, 然后再判斷處理導入正式表的, 在SQL Server 2005中, SSIS可以在導入處理時直接完成這種處理

    問題描述:

    當你把數據從其他數據庫, 或者是文本文件之類的其他數據源導入到目的數據庫時, 有時希望在導入的處理中, 能夠實現"數據存在時更新, 不存在時導入"

    在之前, 一般是通過導入臨時表, 然后再判斷處理導入正式表的, SQL Server 2005, SSIS可以在導入處理時直接完成這種處理.

     

    下面具體演示一下如何用SSIS完成這樣的處理:

    1.          準備測試環境

    -- 1. 在數據庫中創建下面的對象

    USE tempdb

    GO

    CREATE TABLE dbo.tb(

        id int PRIMARY KEY,

        name nvarchar(128))

    GO

    -- 2. 準備兩個文本文件, 放在d:"test 目錄下, 文件的內容如下

    t1.txt

    id name

    1   張三

    2   李四

    t2.txt

    id name

    1   張三君

    3   李林

    4   阿聯酋

    2.          創建新的 Integration Services 項目(創建SSIS包)

    Ø       在“開始”菜單中,依次指向“所有程序”、“Microsoft SQL Server 2005,再單擊 SQL Server Business Intelligence Development Studio

    Ø       在“文件”菜單中,指向“新建”,再單擊“項目”,以創建一個新的 Integration Services 項目。

    Ø       在“新建項目”對話框的“模板”窗格中,選擇“Integration Services 項目”。

    Ø       在“名稱”框中,將默認名稱更改為 SSIS Tutorial。或者,清除“創建解決方案的目錄”復選框。

    Ø       接受默認位置,或單擊“瀏覽”,以瀏覽并找到要使用的文件夾。

    Ø       在“項目位置”對話框中,單擊文件夾,再單擊“打開”。

    Ø       單擊“確定”。

    Ø       默認情況下,將創建一個名為新建包.dtsx的空包,并將該包添加到項目中。

    Ø       在解決方案資源管理器工具欄中,右鍵單擊 Package.dtsx,再單擊“重命名”,將默認包重命名為 Lesson 1.dtsx

    Ø       當系統提示重命名包對象時,單擊“是”。

    3.          SSIS包添加數據源(導入數據的源和目標數據源)

    Ø       首先添加導入數據的源

    Ø       右鍵單擊“連接管理器”區域中的任意位置,再單擊“新建平面文件連接”。

    Ø       在“平面文件連接管理器編輯器”對話框的“連接管理器名稱”字段中,鍵入 Source

    Ø       單擊“瀏覽”。

    Ø       在“打開”對話框中,瀏覽并找到“d:"test"t1.txt”文件。

    Ø       “常規”選項中,勾選“在第1個數據行中顯示列名稱”。

    Ø       “高級”選項中,選擇“id”列,將數據類型設置為“four-byte single integer[DT_I4]”。

    Ø       “高級”選項中,選擇“name”列,將數據類型設置為“Unicode string[DT_WSTR]”。

    Ø       然后,你可以在“預覽”中查看數據是否正確。

     

    Ø       然后添加接收數據的目的數據源

    Ø       右鍵單擊連接管理器區域中的任意位置,再單擊“新建OLE DB 連接

    Ø       配置OLE DB 連接管理器對話框中,單擊新建

    Ø       服務器名稱中,輸入localhost

    Ø       localhost 指定為服務器名稱時,連接管理器將連接到本地計算機上Microsoft SQL Server 2005 的默認實例。若要使用SQL Server 2005 的遠程實例,請將localhost 替換為要連接到的服務器的名稱。

    Ø       登錄到服務器組中,確認選擇了使用Windows 身份驗證

    Ø       連接到數據庫組的選擇或輸入數據庫名稱框中,鍵入或選擇tempdb

    Ø       單擊測試連接,驗證指定的連接設置是否有效。

    Ø       單擊確定

    Ø       單擊確定

    Ø       配置OLE DB 連接管理器對話框的數據連接窗格中,確認選擇了localhost.tempdb

    Ø       單擊確定

     

    4.          SSIS包添加數據流任務

    Ø       單擊“控制流”選項卡。

    Ø       在“工具箱”中,展開“控制流項”,并將一個數據流任務拖到“控制流”選項卡的設計圖面上。

    Ø       在“控制流”設計圖面中,右鍵單擊新添加的數據流任務,再單擊“重命名”,將名稱更改為Import Data

     

    5.          在數據流任務中設置數據流源

    Ø       打開“數據流”設計器,方法是雙擊Import Data 數據流任務或單擊數據流選項卡。

    Ø       工具箱中,展開數據流源,然后將平面文件源拖動到數據流選項卡的設計圖面上。

    Ø       數據流設計圖面上,右鍵單擊新添加的平面文件源,單擊重命名,然后將該名稱更改為Source Data

    Ø       雙擊此平面文件源,打開平面文件源編輯器對話框。

    Ø       平面文件連接管理器框中,鍵入或選擇Source

    Ø       單擊并驗證列名是否正確。

    Ø       單擊確定

     

    6.          在數據流任務中添加查找處理組件

    Ø       在“工具箱”中,展開“數據流轉換”,然后將“查找”拖動到“數據流”選項卡的設計圖面上。將“查找”直接放置在Source Data 源的下面。

    Ø       單擊Source Data 平面文件源,并將綠色箭頭拖動到新添加的查找轉換中,以連接這兩個組件。

    Ø       數據流設計圖面上,右鍵單擊新添加的查找轉換,單擊重命名,然后將該名稱更改為Lookup id

    Ø       雙擊Lookup id 轉換。

    Ø       查找轉換編輯器對話框的“OLE DB 連接管理器框中,確保顯示localhost.tempdb

    Ø       使用表或視圖框中,鍵入或選擇[dbo].[tb]

    Ø       單擊選項卡。

    Ø       可用輸入列面板中,將id 拖放到可用查找列面板的id 上。

    Ø       單擊確定

     

    7.          在數據流任務中添加插入數據處理需要的目標數據源

    Ø       在“工具箱”中,展開“數據流目標”,并將“OLE DB 目標拖到數據流選項卡的設計圖面上。將OLE DB 目標直接放置在“Lookup id”轉換的下面。

    Ø       單擊“Lookup id”轉換,并將紅色箭頭拖到新添加的“OLE DB 目標上,以便將兩個組件連接在一起。

    Ø       在出現的配置錯誤輸出對話框中,“錯誤”列中選擇“重定向行”

    Ø       單擊確定

    Ø       數據流設計圖面上,右鍵單擊新添加的“OLE DB 目標組件,單擊重命名,然后將名稱更改為Insert data

    Ø       雙擊Insert data

    Ø       “OLE DB 目標編輯器對話框中,確保已在“OLE DB 連接管理器框中選中localhost.tempdb

    Ø       表或視圖的名稱框中,鍵入或選擇[dbo].[tb]

    Ø       單擊映射

    Ø       驗證id, name 輸入列是否已正確映射到目標列。如果映射了同名列,則說明映射正確。

    Ø       單擊確定

     

    8.          在數據流任務中添加更新數據處理需要的OLE DB命令組件

    Ø       在“工具箱”中,展開“數據流組件轉換”,并將“OLE DB 命令拖到數據流選項卡的設計圖面上。將OLE DB 目標直接放置在“Lookup id”轉換的下面。

    Ø       單擊“Lookup id”轉換,并將綠色箭頭拖到新添加的“OLE DB 命令上,以便將兩個組件連接在一起。

    Ø       數據流設計圖面上,右鍵單擊新添加的“OLE DB命令組件,單擊重命名,然后將名稱更改為Update data

    Ø       雙擊Update data

    Ø       “Update Data 高級編輯器對話框中,“連接管理”選項的“連接管理器”列中,選中localhost.tempdb

    Ø       在“組件屬性”選項中,“自定義屬性”的“SQLCommand”屬性中輸入:

    UPDATE dbo.tb SET name = ? WHERE id = ?

    Ø       列映射選項中,設置“輸入列”,將name映射到param_0,將id映射到param_1。注:param_0對應UPDAT語句中的第1?,而param_1對應UPDATE語句中的第2?,這是固定的。

    Ø       單擊確定

     

    9.          測試

    Ø       按“F5”執行SSIS

    Ø       執行結束(所有的組件都變為綠色),你會看到數據流向“Inset Data”的有兩條數據

    Ø       雙擊“連接管理器”中的Source,重新設置文件名為D:"test"d2.txt

    Ø       單擊“確定”

    Ø       按“Ctrl+Shift+F5,重新啟動SSIS

    Ø       執行結束(所有的組件都變為綠色),你會看到數據流向“Inset Data”的有兩條數據,流向“Update Data”的有1條數據

    Ø       最后,在數據庫中查詢tempdb.dbo.tb,驗證數據導入的正確性

     

    10.       添加循環,一次完成test目錄下所有文件的導入

    Ø       Business Intelligence Development Studio 中,單擊控制流選項卡。

    Ø       工具箱中,展開控制流項,然后將“Foreach 循環容器拖到控制流選項卡的設計圖面上。

    Ø       右鍵單擊新添加的“Foreach 循環容器,并選擇編輯

    Ø       “Foreach 循環編輯器對話框的常規頁中,為名稱輸入Foreach File in Folder。單擊確定

    Ø       Foreach 循環容器配置枚舉器

    Ø       雙擊文件夾中的Foreach 文件以重新打開“Foreach 循環編輯器

     

    Ø       單擊集合

    Ø       集合頁中,選擇“Foreach 文件枚舉器

    Ø       枚舉器配置組中,單擊瀏覽

    Ø       瀏覽文件夾對話框中,找到d:"test

    Ø       文件框中,鍵入*.txt

    Ø       單擊變量映射將枚舉器映射為用戶定義的變量。

    Ø       變量映射頁的變量列中,單擊空單元格并選擇“<新建變量…>”

    Ø       添加變量對話框中,為名稱鍵入varFileName

    Ø       單擊確定

    Ø       再次單擊確定,退出“Foreach 循環編輯器對話框。

     

    Ø       將數據流任務Import Data 數據流任務拖動到現已重命名為Foreach File in Folder Foreach 循環容器中。

     

    Ø       配置平面文件連接管理器以使用連接字符串的變量

    Ø       連接管理器窗格中,右鍵單擊Source Data,再選擇屬性

    Ø       屬性窗口中,針對表達式,單擊空單元,然后單擊省略號按鈕“(…)”

    Ø       屬性表達式編輯器對話框的屬性列中,鍵入或選擇ConnectionString

    Ø       表達式列中,單擊省略號按鈕“(…)”以打開表達式生成器對話框。

    Ø       表達式生成器對話框中,展開變量節點。

    Ø       將變量用戶::varFileName 拖到表達式框中。

    Ø       單擊確定關閉表達式生成器對話框。

    Ø       再次單擊確定關閉屬性表達式編輯器對話框。



    http://dev.csdn.net/author/zjcxc/b1248376d50d41e884708d4bf09ec0af.html
    posted on 2007-09-27 09:56 渠上月 閱讀(1489) 評論(1)  編輯  收藏 所屬分類: VS 2005

    評論

    # re: SSIS處理導入數據時, 存在的更新, 不存在的插入 2009-11-17 11:39 vc5310
    雖然寫得很詳細,但卻是一個很笨的方法!想一想merge!!
    精簡方法鏈接:
    http://hi.baidu.com/vc5310/blog/item/05d15759b8f161202934f087.html  回復  更多評論
      

    主站蜘蛛池模板: 四虎国产精品免费视| 成年女人色毛片免费看| 亚洲精品国产V片在线观看| 亚洲码和欧洲码一码二码三码| 免费专区丝袜脚调教视频| 久久久久亚洲av无码专区导航| 麻豆精品不卡国产免费看| 亚洲日本va在线视频观看| 中文字幕免费在线看| 亚洲精品国产精品乱码不99 | 国产又黄又爽胸又大免费视频 | 亚洲色婷婷一区二区三区| 不卡视频免费在线观看| 亚洲成a人片在线观看无码| 免费在线看污视频| 亚洲AV无码一区二区乱孑伦AS| 中文字幕亚洲第一| 国产裸体美女永久免费无遮挡| 亚洲人成色77777| 一区二区三区四区免费视频| 亚洲精品视频在线观看免费| 国产精品69白浆在线观看免费 | 国产福利在线观看永久免费| 亚洲国产精品福利片在线观看| 51精品视频免费国产专区| 狠狠色香婷婷久久亚洲精品| 国产免费人成在线视频| 一边摸一边爽一边叫床免费视频 | 亚洲福利视频一区二区三区| 最近最好的中文字幕2019免费| 天天综合亚洲色在线精品| 久久亚洲欧洲国产综合| 91成人免费观看| 亚洲乱码无人区卡1卡2卡3| 国产啪亚洲国产精品无码| 99爱在线精品视频免费观看9| 亚洲天堂免费在线| 国产精品亚洲二区在线观看| 69精品免费视频| 免费观看又污又黄在线观看| 亚洲AV日韩精品久久久久|