<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  回復  更多評論
      

    主站蜘蛛池模板: 国产成人亚洲综合无码精品| 国产成人啪精品视频免费网| 亚洲av午夜福利精品一区| 亚洲av成人一区二区三区观看在线 | 免费无码H肉动漫在线观看麻豆| 亚洲国产精品狼友中文久久久| 国产亚洲综合视频| 亚洲欧洲久久久精品| 人妻无码中文字幕免费视频蜜桃 | 亚洲免费视频一区二区三区| 一级毛片免费播放男男| 中文字幕亚洲综合久久男男| aa在线免费观看| 亚洲av日韩av无码| 91久久精品国产免费一区| 久久亚洲熟女cc98cm| 97热久久免费频精品99| 亚洲最大无码中文字幕| 免费国产成人高清在线观看麻豆| 免费激情网站国产高清第一页| 亚洲综合区小说区激情区 | 免费A级毛片无码视频| 亚洲精品乱码久久久久久下载| 国产无人区码卡二卡三卡免费| 亚洲精品无AMM毛片| 免费人成在线观看视频播放 | 足恋玩丝袜脚视频免费网站| 亚洲精品美女网站| 亚洲高清最新av网站| 国产精品偷伦视频观看免费 | 中文字幕人成人乱码亚洲电影| 色欲国产麻豆一精品一AV一免费| 亚洲欧洲日产国码在线观看| 最新中文字幕免费视频| 日产久久强奸免费的看| 亚洲国产成人久久综合一 | 日韩成人免费在线| 日本一道本不卡免费| 亚洲av永久无码精品秋霞电影秋| 亚洲一区二区三区乱码A| 亚洲精品视频免费在线观看|