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

亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

SSIS處理導(dǎo)入數(shù)據(jù)時, 存在的更新, 不存在的插入

系統(tǒng) 1795 0
<iframe align="top" marginwidth="0" marginheight="0" src="http://www.zealware.com/csdnblog01.html" frameborder="0" width="728" scrolling="no" height="90"></iframe>

問題描述 :

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

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

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

1. 準備測試環(huán)境

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

USE tempdb

GO

CREATE TABLE dbo.tb (

id int PRIMARY KEY ,

name nvarchar ( 128 ))

GO

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

t1 . txt

id name

1 張三

2 李四

t2 . txt

id name

1 張三君

3 李林

4 阿聯(lián)酋

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

? 在“開始”菜單中,依次指向“所有程序”、“ Microsoft SQL Server <chmetcnv w:st="on" tcsc="0" numbertype="1" negative="False" hasspace="False" sourcevalue="2005" unitname="”"><font face="Times New Roman">2005</font><span lang="EN-US" style="FONT-FAMILY: 宋體; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"><span lang="EN-US">”</span></span></chmetcnv> ,再單擊 SQL Server Business Intelligence Development Studio

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

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

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

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

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

? 單擊“確定”。

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

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

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

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

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

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

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

? 單擊“瀏覽”。

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

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

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

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

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

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

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

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

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

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

? 登錄到服務(wù)器 組中,確認選擇了 使用 Windows 身份驗證

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

? 單擊 測試連接 ,驗證指定的連接設(shè)置是否有效。

? 單擊 確定

? 單擊 確定

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

? 單擊 確定

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

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

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

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

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

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

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

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

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

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

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

? 單擊 確定

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

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

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

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

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

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

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

? 單擊 選項卡。

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

? 單擊 確定

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

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

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

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

? 單擊 確定

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

? 雙擊 Insert data

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

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

? 單擊 映射

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

? 單擊 確定

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

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

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

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

? 雙擊 Update data

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

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

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

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

? 單擊 確定

9. 測試

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

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

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

? 單擊“確定”

? 按“ Ctrl+Shift+F<chmetcnv w:st="on" tcsc="0" numbertype="1" negative="False" hasspace="False" sourcevalue="5" unitname="”"><font face="Times New Roman">5</font><span lang="EN-US" style="FONT-FAMILY: 宋體; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"><span lang="EN-US">”</span></span></chmetcnv> ,重新啟動 SSIS

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

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

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

<span style=

分享到:
評論

SSIS處理導(dǎo)入數(shù)據(jù)時, 存在的更新, 不存在的插入


更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯(lián)系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發(fā)表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 久久香蕉影视 | 亚洲精品久久久午夜伊人 | 黄 色 免费网 站 成 人 | 久久免费国产精品一区二区 | 精品亚洲永久免费精品 | 欧美一级在线全免费 | 国产成视频 | 亚洲精品久久中文字幕 | 亚洲国产色综合有声小说 | 99国产在线播放 | 一级大片免费观看 | 爱爱视频免费网址 | 欧美一级片在线视频 | 九九精品视频在线观看九九 | 韩国欧美一级毛片免费 | 日韩视频在线一区 | 国产成人亚洲综合a∨婷婷 国产成人亚洲综合欧美一部 | 8050午夜一级全黄毛片 | 欧美三级成人理伦 | 日日摸夜夜欧美一区二区 | 欧美成人欧美激情欧美风情 | 国产在线观看午夜不卡 | 亚洲手机看片 | 亚洲精品色综合久久 | 天天干夜夜怕 | 国产成人精品免费大全 | 一机毛片 | 日韩一区二区三区中文字幕 | 欧美一级毛片片aa视频 | 99视频在线看观免费 | 欧美爱爱网| 成人久久久久久 | 超高清欧美videos360 | 国产看色免费 | 97干干| 日本成人一区二区三区 | 亚洲一区综合在线播放 | 一级特黄特色aa大片 | 99精选视频 | 99re6在线视频免费精品 | 久久毛片免费 |