blog.Toby

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

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

          問(wèn)題描述:

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

          在之前, 一般是通過(guò)導(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包)

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

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

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

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

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

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

          Ø       單擊“確定”。

          Ø       默認(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ì)話(huà)框的“連接管理器名稱(chēng)”字段中,鍵入 Source。

          Ø       單擊“瀏覽”。

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

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

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

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

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

           

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

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

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

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

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

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

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

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

          Ø       單擊確定。

          Ø       單擊確定。

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

          Ø       單擊確定

           

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

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

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

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

           

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

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

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

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

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

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

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

          Ø       單擊確定

           

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

          Ø       在“工具箱”中,展開(kāi)“數(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)換,單擊重命名,然后將該名稱(chēng)更改為Lookup id

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

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

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

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

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

          Ø       單擊確定。

           

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

          Ø       在“工具箱”中,展開(kāi)“數(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ì)話(huà)框中,“錯(cuò)誤”列中選擇“重定向行”

          Ø       單擊確定

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

          Ø       雙擊Insert data。

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

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

          Ø       單擊映射

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

          Ø       單擊確定。

           

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

          Ø       在“工具箱”中,展開(kāi)“數(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命令組件,單擊重命名,然后將名稱(chēng)更改為Update data

          Ø       雙擊Update data。

          Ø       “Update Data 高級(jí)編輯器對(duì)話(huà)框中,“連接管理”選項(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ù)中查詢(xún)tempdb.dbo.tb,驗(yàn)證數(shù)據(jù)導(dǎo)入的正確性

           

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

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

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

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

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

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

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

           

          Ø       單擊集合

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

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

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

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

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

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

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

          Ø       單擊確定。

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

           

          Ø       將數(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ì)話(huà)框的屬性列中,鍵入或選擇ConnectionString

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

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

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

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

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



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

          評(píng)論

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

          主站蜘蛛池模板: 龙泉市| 保定市| 同江市| 仪征市| 略阳县| 彩票| 北宁市| 灌云县| 静乐县| 安图县| 瓦房店市| 太原市| 灵武市| 博乐市| 吴旗县| 苍梧县| 明水县| 且末县| 万源市| 定兴县| 桂阳县| 印江| 宜州市| 绥棱县| 仙桃市| 营山县| 宁武县| 南京市| 当涂县| 高要市| 马山县| 平乐县| 波密县| 河间市| 蓬莱市| 义马市| 景德镇市| 合山市| 泗阳县| 印江| 鲁甸县|