问题描述:当你把数据从其他数据库,或者是文本文件之类的其他数据源导入到目的数据库时,有时希望在导入的处理中,能够实现"数据存在时更新,不存在时导入"在" />

SSIS处理导入数据时, 存在的更新, 不存在的插入

系统 1434 0
<iframe align="top" marginwidth="0" marginheight="0" src="http://www.zealware.com/csdnblog01.html" frameborder="0" width="728" scrolling="no" height="90"></iframe>

问题描述 :

当你把数据从其他数据库 , 或者是文本文件之类的其他数据源导入到目的数据库时 , 有时希望在导入的处理中 , 能够实现 " 数据存在时更新 , 不存在时导入 "

在之前 , 一般是通过导入临时表 , 然后再判断处理导入正式表的 , 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 <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

Ø 在“文件”菜单中,指向“新建”,再单击“项目”,以创建一个新的 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+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

Ø 执行结束(所有的组件都变为绿色),你会看到数据流向“ Inset Data” 的有两条数据,流向“ Update Data ”的有 1 条数据

Ø 最后,在数据库中查询 tempdb.dbo.tb ,验证数据导入的正确性

10. 添加循环,一次完成 test 目录下所有文件的导入

<span style=

分享到:
评论

SSIS处理导入数据时, 存在的更新, 不存在的插入


更多文章、技术交流、商务合作、联系博主

微信扫码或搜索:z360901061

微信扫一扫加我为好友

QQ号联系: 360901061

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描下面二维码支持博主2元、5元、10元、20元等您想捐的金额吧,狠狠点击下面给点支持吧,站长非常感激您!手机微信长按不能支付解决办法:请将微信支付二维码保存到相册,切换到微信,然后点击微信右上角扫一扫功能,选择支付二维码完成支付。

【本文对您有帮助就好】

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描上面二维码支持博主2元、5元、10元、自定义金额等您想捐的金额吧,站长会非常 感谢您的哦!!!

发表我的评论
最新评论 总共0条评论