- 将文件中的数据导入数据库时,需要判断数据库表中已存在该数据的话,将数据更新;不存在的话,增量插入
- 工具:SQL Server ,Microsoft SQL Server Management Studio ,Visual Studio (SSDT)
下图为上传数据的SSIS流程包,下面分步阐述
首先,在数据库中新建两张表,临时表:[IMP_DJ],正式表:[DJ]
注意:字段与待上传的文件字段一致
USE [Test]
GO
/****** Object: Table [dbo].[DJ] Script Date: 2020/3/27 16:55:58 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dbo].[IMP_DJ](
[A] [nvarchar](255) NULL,
[B] [nvarchar](255) NULL,
[C] [nvarchar](255) NULL
) ON [PRIMARY]
GO
CREATE TABLE [dbo].[DJ](
[A] [nvarchar](255) NULL,
[B] [nvarchar](255) NULL,
[C] [nvarchar](255) NULL
) ON [PRIMARY]
GO
打开SSDT工具,新建一个SSIS项目
将执行SQL任务拖入控制流面板中,Connection连接上数据库,更改Name名称
SQL Statement中写:
truncate table IMP_DJ
目的是清空临时表[IMP_DJ]
再拖入一个Foreach循环容器,将前面的执行SQL任务与循环容器用蓝色箭头连上
双击打开循环容器,在常规中更改容器的名称
在集合中选择Foreach 文件枚举器,枚举器配置中选择待上传文件的文件夹位置
在变量映射中新建变量,值为待上传文件所在文件夹位置
然后将数据流拖入循环容器中,双击进入数据流控制面板。在数据流面板中拖入excel源和OLE DB目标
excel源中新建Excel连接管理器,连接上文件中任意一个excel文件
OLE DB目标新建连接管理器,连接上数据库,选择临时表[IMP_DJ]
在映射中可以看到excel源与OLE DB目标的字段都一一关联上
返回控制流面板,向循环容器中拖入文件系统任务,将其与数据流连接上
Operation中选择移动文件,目标连接选择文件上传好以后移动到的备份文件夹,源连接选择原文件夹位置的变量
最后,在控制流面板中拖入执行SQL任务编辑器,放在循环容器下面,并将其与循环容器连接上
Connection选择数据库,SQLStatement中写进
-- 删除正式表中已有的临时表中的数据
delete from DJ
where A in (select distinct A from IMP_DJ)
-- 将临时表的数据插入到正式表中
insert into DJ select * from IMP_DJ
执行一下就OK啦~~~
此方法可以完美的做到先判断文件夹中的文件正式表中是否存在,不存在的增量插入,存在的更新
若只是向批量上传文件夹中的文件请参考我另一篇博客:https://blog.csdn.net/weixin_41542593/article/details/104988366
感谢阅读!!!