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

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

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

    blog.Toby

      BlogJava :: 首頁(yè) :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理 ::
      130 隨筆 :: 2 文章 :: 150 評(píng)論 :: 0 Trackbacks

    當(dāng)你把數(shù)據(jù)從其他數(shù)據(jù)庫(kù), 或者是文本文件之類的其他數(shù)據(jù)源導(dǎo)入到目的數(shù)據(jù)庫(kù)時(shí), 有時(shí)希望在導(dǎo)入的處理中, 能夠?qū)崿F(xiàn)"數(shù)據(jù)存在時(shí)更新, 不存在時(shí)導(dǎo)入" 在之前, 一般是通過導(dǎo)入臨時(shí)表, 然后再判斷處理導(dǎo)入正式表的, 在SQL Server 2005中, SSIS可以在導(dǎo)入處理時(shí)直接完成這種處理

    問題描述:

    當(dāng)你把數(shù)據(jù)從其他數(shù)據(jù)庫(kù), 或者是文本文件之類的其他數(shù)據(jù)源導(dǎo)入到目的數(shù)據(jù)庫(kù)時(shí), 有時(shí)希望在導(dǎo)入的處理中, 能夠?qū)崿F(xiàn)"數(shù)據(jù)存在時(shí)更新, 不存在時(shí)導(dǎo)入"

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

     

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

    1.          準(zhǔn)備測(cè)試環(huán)境

    -- 1. 在數(shù)據(jù)庫(kù)中創(chuàng)建下面的對(duì)象

    USE tempdb

    GO

    CREATE TABLE dbo.tb(

        id int PRIMARY KEY,

        name nvarchar(128))

    GO

    -- 2. 準(zhǔn)備兩個(gè)文本文件, 放在d:"test 目錄下, 文件的內(nèi)容如下

    t1.txt

    id name

    1   張三

    2   李四

    t2.txt

    id name

    1   張三君

    3   李林

    4   阿聯(lián)酋

    2.          創(chuàng)建新的 Integration Services 項(xiàng)目(創(chuàng)建SSIS包)

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

    Ø       在“文件”菜單中,指向“新建”,再單擊“項(xiàng)目”,以創(chuàng)建一個(gè)新的 Integration Services 項(xiàng)目。

    Ø       在“新建項(xiàng)目”對(duì)話框的“模板”窗格中,選擇“Integration Services 項(xiàng)目”。

    Ø       在“名稱”框中,將默認(rèn)名稱更改為 SSIS Tutorial。或者,清除“創(chuàng)建解決方案的目錄”復(fù)選框。

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

    Ø       在“項(xiàng)目位置”對(duì)話框中,單擊文件夾,再單擊“打開”。

    Ø       單擊“確定”。

    Ø       默認(rèn)情況下,將創(chuàng)建一個(gè)名為新建包.dtsx的空包,并將該包添加到項(xiàng)目中。

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

    Ø       當(dāng)系統(tǒng)提示重命名包對(duì)象時(shí),單擊“是”。

    3.          SSIS包添加數(shù)據(jù)源(導(dǎo)入數(shù)據(jù)的源和目標(biāo)數(shù)據(jù)源)

    Ø       首先添加導(dǎo)入數(shù)據(jù)的源

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

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

    Ø       單擊“瀏覽”。

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

    Ø       “常規(guī)”選項(xiàng)中,勾選“在第1個(gè)數(shù)據(jù)行中顯示列名稱”。

    Ø       “高級(jí)”選項(xiàng)中,選擇“id”列,將數(shù)據(jù)類型設(shè)置為“four-byte single integer[DT_I4]”。

    Ø       “高級(jí)”選項(xiàng)中,選擇“name”列,將數(shù)據(jù)類型設(shè)置為“Unicode string[DT_WSTR]”。

    Ø       然后,你可以在“預(yù)覽”中查看數(shù)據(jù)是否正確。

     

    Ø       然后添加接收數(shù)據(jù)的目的數(shù)據(jù)源

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

    Ø       配置OLE DB 連接管理器對(duì)話框中,單擊新建。

    Ø       服務(wù)器名稱中,輸入localhost。

    Ø       localhost 指定為服務(wù)器名稱時(shí),連接管理器將連接到本地計(jì)算機(jī)上Microsoft SQL Server 2005 的默認(rèn)實(shí)例。若要使用SQL Server 2005 的遠(yuǎn)程實(shí)例,請(qǐng)將localhost 替換為要連接到的服務(wù)器的名稱。

    Ø       登錄到服務(wù)器組中,確認(rèn)選擇了使用Windows 身份驗(yàn)證。

    Ø       連接到數(shù)據(jù)庫(kù)組的選擇或輸入數(shù)據(jù)庫(kù)名稱框中,鍵入或選擇tempdb。

    Ø       單擊測(cè)試連接,驗(yàn)證指定的連接設(shè)置是否有效。

    Ø       單擊確定

    Ø       單擊確定

    Ø       配置OLE DB 連接管理器對(duì)話框的數(shù)據(jù)連接窗格中,確認(rèn)選擇了localhost.tempdb

    Ø       單擊確定

     

    4.          SSIS包添加數(shù)據(jù)流任務(wù)

    Ø       單擊“控制流”選項(xiàng)卡。

    Ø       在“工具箱”中,展開“控制流項(xiàng)”,并將一個(gè)數(shù)據(jù)流任務(wù)拖到“控制流”選項(xiàng)卡的設(shè)計(jì)圖面上。

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

     

    5.          在數(shù)據(jù)流任務(wù)中設(shè)置數(shù)據(jù)流源

    Ø       打開“數(shù)據(jù)流”設(shè)計(jì)器,方法是雙擊Import Data 數(shù)據(jù)流任務(wù)或單擊數(shù)據(jù)流選項(xiàng)卡。

    Ø       工具箱中,展開數(shù)據(jù)流源,然后將平面文件源拖動(dòng)到數(shù)據(jù)流選項(xiàng)卡的設(shè)計(jì)圖面上。

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

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

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

    Ø       單擊并驗(yàn)證列名是否正確。

    Ø       單擊確定。

     

    6.          在數(shù)據(jù)流任務(wù)中添加查找處理組件

    Ø       在“工具箱”中,展開“數(shù)據(jù)流轉(zhuǎn)換”,然后將“查找”拖動(dòng)到“數(shù)據(jù)流”選項(xiàng)卡的設(shè)計(jì)圖面上。將“查找”直接放置在Source Data 源的下面。

    Ø       單擊Source Data 平面文件源,并將綠色箭頭拖動(dòng)到新添加的查找轉(zhuǎn)換中,以連接這兩個(gè)組件。

    Ø       數(shù)據(jù)流設(shè)計(jì)圖面上,右鍵單擊新添加的查找轉(zhuǎn)換,單擊重命名,然后將該名稱更改為Lookup id

    Ø       雙擊Lookup id 轉(zhuǎn)換。

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

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

    Ø       單擊選項(xiàng)卡。

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

    Ø       單擊確定

     

    7.          在數(shù)據(jù)流任務(wù)中添加插入數(shù)據(jù)處理需要的目標(biāo)數(shù)據(jù)源

    Ø       在“工具箱”中,展開“數(shù)據(jù)流目標(biāo)”,并將“OLE DB 目標(biāo)拖到數(shù)據(jù)流選項(xiàng)卡的設(shè)計(jì)圖面上。將OLE DB 目標(biāo)直接放置在“Lookup id”轉(zhuǎn)換的下面。

    Ø       單擊“Lookup id”轉(zhuǎn)換,并將紅色箭頭拖到新添加的“OLE DB 目標(biāo)上,以便將兩個(gè)組件連接在一起。

    Ø       在出現(xiàn)的配置錯(cuò)誤輸出對(duì)話框中,“錯(cuò)誤”列中選擇“重定向行”

    Ø       單擊確定

    Ø       數(shù)據(jù)流設(shè)計(jì)圖面上,右鍵單擊新添加的“OLE DB 目標(biāo)組件,單擊重命名,然后將名稱更改為Insert data。

    Ø       雙擊Insert data

    Ø       “OLE DB 目標(biāo)編輯器對(duì)話框中,確保已在“OLE DB 連接管理器框中選中localhost.tempdb

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

    Ø       單擊映射。

    Ø       驗(yàn)證id, name 輸入列是否已正確映射到目標(biāo)列。如果映射了同名列,則說明映射正確。

    Ø       單擊確定。

     

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

    Ø       在“工具箱”中,展開“數(shù)據(jù)流組件轉(zhuǎn)換”,并將“OLE DB 命令拖到數(shù)據(jù)流選項(xiàng)卡的設(shè)計(jì)圖面上。將OLE DB 目標(biāo)直接放置在“Lookup id”轉(zhuǎn)換的下面。

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

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

    Ø       雙擊Update data。

    Ø       “Update Data 高級(jí)編輯器對(duì)話框中,“連接管理”選項(xiàng)的“連接管理器”列中,選中localhost.tempdb。

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

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

    Ø       列映射選項(xiàng)中,設(shè)置“輸入列”,將name映射到param_0,將id映射到param_1。注:param_0對(duì)應(yīng)UPDAT語(yǔ)句中的第1個(gè)?,而param_1對(duì)應(yīng)UPDATE語(yǔ)句中的第2個(gè)?,這是固定的。

    Ø       單擊確定。

     

    9.          測(cè)試

    Ø       按“F5”執(zhí)行SSIS

    Ø       執(zhí)行結(jié)束(所有的組件都變?yōu)榫G色),你會(huì)看到數(shù)據(jù)流向“Inset Data”的有兩條數(shù)據(jù)

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

    Ø       單擊“確定”

    Ø       按“Ctrl+Shift+F5,重新啟動(dòng)SSIS

    Ø       執(zhí)行結(jié)束(所有的組件都變?yōu)榫G色),你會(huì)看到數(shù)據(jù)流向“Inset Data”的有兩條數(shù)據(jù),流向“Update Data”的有1條數(shù)據(jù)

    Ø       最后,在數(shù)據(jù)庫(kù)中查詢tempdb.dbo.tb,驗(yàn)證數(shù)據(jù)導(dǎo)入的正確性

     

    10.       添加循環(huán),一次完成test目錄下所有文件的導(dǎo)入

    Ø       Business Intelligence Development Studio 中,單擊控制流選項(xiàng)卡。

    Ø       工具箱中,展開控制流項(xiàng),然后將“Foreach 循環(huán)容器拖到控制流選項(xiàng)卡的設(shè)計(jì)圖面上。

    Ø       右鍵單擊新添加的“Foreach 循環(huán)容器,并選擇編輯。

    Ø       “Foreach 循環(huán)編輯器對(duì)話框的常規(guī)頁(yè)中,為名稱輸入Foreach File in Folder。單擊確定。

    Ø       Foreach 循環(huán)容器配置枚舉器

    Ø       雙擊文件夾中的Foreach 文件以重新打開“Foreach 循環(huán)編輯器。

     

    Ø       單擊集合。

    Ø       集合頁(yè)中,選擇“Foreach 文件枚舉器。

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

    Ø       瀏覽文件夾對(duì)話框中,找到d:"test。

    Ø       文件框中,鍵入*.txt。

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

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

    Ø       添加變量對(duì)話框中,為名稱鍵入varFileName。

    Ø       單擊確定

    Ø       再次單擊確定,退出“Foreach 循環(huán)編輯器對(duì)話框。

     

    Ø       將數(shù)據(jù)流任務(wù)Import Data 數(shù)據(jù)流任務(wù)拖動(dòng)到現(xiàn)已重命名為Foreach File in Folder Foreach 循環(huán)容器中。

     

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

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

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

    Ø       屬性表達(dá)式編輯器對(duì)話框的屬性列中,鍵入或選擇ConnectionString

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

    Ø       表達(dá)式生成器對(duì)話框中,展開變量節(jié)點(diǎn)。

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

    Ø       單擊確定關(guān)閉表達(dá)式生成器對(duì)話框。

    Ø       再次單擊確定關(guān)閉屬性表達(dá)式編輯器對(duì)話框。



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

    評(píng)論

    # re: SSIS處理導(dǎo)入數(shù)據(jù)時(shí), 存在的更新, 不存在的插入 2009-11-17 11:39 vc5310
    雖然寫得很詳細(xì),但卻是一個(gè)很笨的方法!想一想merge!!
    精簡(jiǎn)方法鏈接:
    http://hi.baidu.com/vc5310/blog/item/05d15759b8f161202934f087.html  回復(fù)  更多評(píng)論
      

    主站蜘蛛池模板: AV免费网址在线观看| 亚洲Av无码精品色午夜| 亚洲精品天堂成人片?V在线播放| 国产不卡免费视频| 一本久久a久久精品亚洲| 成人性生交大片免费看午夜a| 国产成人免费a在线视频app| 国产成人亚洲综合| 亚洲黄色在线观看网站| 国产亚洲精品a在线无码| 亚洲国产综合精品中文第一区| 2022年亚洲午夜一区二区福利 | 亚洲国产国产综合一区首页| 亚洲成人网在线观看| 亚洲成a人无码亚洲成www牛牛| 永久免费精品影视网站| 久久国产高潮流白浆免费观看 | 97视频热人人精品免费| 免费一级特黄特色大片在线观看| 在线免费观看视频你懂的| 亚洲欧洲中文日韩久久AV乱码| 亚洲久本草在线中文字幕| 亚洲jizzjizz少妇| 99久久国产精品免费一区二区| 午夜宅男在线永久免费观看网| 无码专区一va亚洲v专区在线| 亚洲狠狠久久综合一区77777| 亚洲午夜精品一区二区麻豆| GOGOGO免费观看国语| 西西人体免费视频| 好爽…又高潮了毛片免费看| 亚洲日韩欧洲无码av夜夜摸| 国产婷婷综合丁香亚洲欧洲| 精品国产免费人成网站| 国产精品无码免费播放| 亚洲日韩精品一区二区三区无码 | 日本高清不卡aⅴ免费网站| 韩国欧洲一级毛片免费| 亚洲国产精品免费视频| 亚洲AV综合色区无码一二三区| 久9这里精品免费视频|