`
happmaoo
  • 浏览: 4465704 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

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

阅读更多
<iframe align="center" marginwidth="0" marginheight="0" src="http://www.zealware.com/csdnblog336280.html" frameborder="0" width="336" scrolling="no" height="280"></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目录下所有文件的导入

相关推荐

    图解SSIS循环导入Excel工作表图解

    在这个过程中,SSIS循环导入Excel工作表是一个常见的需求,尤其是在处理包含多个工作表的数据源时。以下将详细解释如何实现这一功能。 1. **测试环境与项目创建**: - 在此示例中,测试环境是一个包含三个相同结构...

    通过SSIS导入数据(SQL Server2005-->Oracle11g)

    ### 通过SSIS导入数据(SQL Server2005→Oracle11g) #### 一、概述 在数据集成和迁移场景中,SQL Server Integration Services (SSIS) 是一种非常强大的工具,它允许用户轻松地从不同的数据源抽取、转换和加载...

    批量导入数据,大数据导入

    首先,批量导入数据是指一次性处理大量记录的过程,这在处理大量结构化数据时非常常见,例如在电子商务、金融交易或社交媒体分析等场景。批量导入可以显著提高效率,避免逐条插入数据的低效。SQL(Structured Query ...

    SQL Server数据库导入导出技术

    例如,`SELECT INTO` 语句用于创建新表并复制数据,而`INSERT INTO` 语句则用于将数据插入到已存在的表中。在异构数据库间进行数据操作时,可以使用`OPENDATASOURCE`和`OPENROWSET`函数。`OPENDATASOURCE`允许连接到...

    excel批量导入数据库

    1. Microsoft SQL Server Integration Services (SSIS):这是一款强大的ETL(Extract, Transform, Load)工具,可以直接处理Excel数据并导入到SQL Server数据库。 2. Apache Nifi:这是一个图形化的数据处理平台,...

    向数据库中导入数据的几种方法

    以下是一些常见的数据库导入数据的方法: 1. **SQL INSERT语句**: 最基础的方式是使用SQL的INSERT语句逐条插入数据。这种方法适用于少量数据的插入,但如果数据量大,效率较低,因为每条记录都需要单独的数据库...

    将EXCEL数据 插入ORACLE数据库

    在IT行业中,将Excel数据插入Oracle数据库是一项常见的任务,尤其对于数据分析、报表生成以及数据迁移等场景至关重要。本文将详细讲解如何实现这一过程,并探讨相关的技术细节和优化策略。 首先,我们需要了解Excel...

    向数据库里导入表单数据

    导入数据的方法多种多样,以下是几种常见的方法: 1. **SQL Server Management Studio (SSMS)**:这是官方提供的图形化工具,可以直接执行INSERT语句来逐条插入数据,或者使用Bulk Insert命令批量导入CSV或Excel...

    sql-数据批量导入

    在SQL数据库管理中,批量导入数据是一项常见的任务,特别是在处理大量结构化数据时。"sql-数据批量导入"这个主题涉及到如何高效地将Excel(通常为.xlsx或.xls格式)文件中的数据导入到SQL数据库中。这里我们将深入...

    数据更新和数据的导入导出.doc

    1. **数据插入**: - 使用`INSERT INTO`语句向数据库表中添加新记录。例如,向`course`表中插入一条记录,需确保满足数据约束,如课程号唯一,学分有效等。示例:`INSERT INTO course VALUES ('C318', '科技英语', ...

    Excel导入导出,把数据从Excel直接导入到Sql数据库中

    用户可以选择“任务” -&gt; “导入数据”或“导出数据”,然后按照向导选择Excel文件,配置数据源和目标数据库,最后执行导入操作。 2. **SQL Server Integration Services (SSIS)**:这是一个强大的ETL(提取、转换...

    Access或者Excel数据导入SQL

    4. 选择要导入的表,并决定是否将数据直接插入SQL Server,还是创建一个新的表并导入数据。 5. 完成设置后,点击“完成”以开始数据导入过程。 对于Excel数据导入SQL,操作也相对简单: 1. 打开Excel工作簿,保存...

    高效导入数据

    在导入数据时,确保拥有足够的权限,并遵循安全最佳实践,避免敏感数据泄露。 综上所述,高效地将Excel数据导入SQL Server涉及多个步骤和方法,需要根据具体场景选择合适的方式。理解并熟练掌握这些技术,能够显著...

    excel数据导入sql工具

    5. **数据验证**:在导入数据前,一些工具会进行数据验证,检查数据是否符合SQL表的约束,如非空字段、数据类型限制等。这样可以避免因不符合规则的数据导致的导入错误。 6. **错误处理**:当遇到导入错误时,好的...

    excel数据导入到sql server数据库中,

    - **BULK INSERT T-SQL命令**:对于大量数据,可以使用BULK INSERT语句直接从Excel文件批量导入数据。需要将Excel文件保存为CSV格式,因为BULK INSERT只支持文本格式。 - **Openrowset函数**:通过在查询中使用...

    来者不拒,大小通吃——谈SQL Server的数据导入.pdf

    - 关闭索引和触发器:在执行大型数据导入时,暂时关闭索引和触发器可以减少数据插入时的计算开销。 - 使用快速导入选项:某些数据导入工具或方法提供了快速导入的选项,例如SSMS的“保持索引和约束”选项应被禁用,...

    用EXCEL批量导入数据库.rar

    导入数据时,我们需要知道数据库的表结构,包括字段名、字段类型和主键约束等。 批量导入数据通常有两种方式:直接SQL命令和使用数据导入工具。对于不熟悉SQL的用户,很多数据库管理系统提供了图形化界面,如SQL ...

    SQL SERVER数据导入导出等辅助功能小工具

    SSIS是SQL Server中用于ETL(Extract, Transform, Load)操作的强大工具,支持从各种数据源导入数据,如文本文件、Excel表格、其他数据库等,并能对数据进行清洗、转换,然后导出到SQL Server中。通过图形化界面...

    U8 BOM快速导入脚本

    在SQL Server Management Studio (SSMS) 中,执行预编译好的脚本,系统会逐行处理并导入数据。为了确保数据安全,通常会在导入前备份相关表,以便在出现问题时可以恢复。此外,还可以设置事务控制,以确保数据的一致...

Global site tag (gtag.js) - Google Analytics