SSIS OLEDB命令转换(插入如果不存在的话)(SSIS OLEDB Command trans

2019-10-18 11:29发布

好了,所以根据微软的文档在SSIS的OLE DB命令转换做到这一点

在OLE DB命令转换为运行在数据流中的每一行的SQL语句。 例如,您可以运行插入,更新,或在一个数据库表中删除行的SQL语句。

所以我想写一些SQL插入行我表一个只有在记录不存在

所以,我想这一点,但控制不断抱怨不好sintaxys的

IF NOT EXISTS
(SELECT * FROM M_Employee_Login WHERE 
           Column1=?
           AND Column2=?
           AND Column3=?)

INSERT INTO [M_Employee_Login]
           ([Column1]
           ,[Column2]
           ,[Column3])
     VALUES
           (?,?,?)

但是,如果我删除IF NOT EXISTS节(只留下插入)的控制人说的可能代码是好的,我在做什么错。

是否有一个简单的解决方案?

更新:顺便说一句我的源是平面文件(CSV文件)

因为答案更新:只是为了让人们知道。 我最终使用OLE DB Command Transformation像我计划的原因是好过的OLE DB Destination进行此项操作。 不同的是,我没有使用的Lookup Component来过滤所有已经存在的记录(如答案的建议)。 然后使用OLE DB Command TransformationInsert SQL ,我不得不在这个问题和它的工作如预期。 希望能帮助到你

Answer 1:

OLEDB Command对象是不一样的OLE DB Destination

而不是做它作为你的描述,而不是使用一个Lookup Component 。 你的数据流成为平面文件源 - >查找组件 - > OLE DB目标

在您的查找,您将编写查询SELECT Column1, Column2, Column3 FROM M_Employee_Login并对其进行配置,使得它不会匹配实体重定向到流,而不是失败(取决于您的2005版VS不是2005年),这将是默认的。

查找后,不匹配的输出将包含没有发现目标表中的相应匹配的值。

最后,配置OLEDB目标进行快速加载选项。



Answer 2:

虽然你可以使用SSIS中查找组件,以避免这可能是最好的办法重复的,但如果你正在寻找一些查询,以避免重复的话,你可以简单地插入,在一些临时/临时表中的所有数据您的数据库,运行下面的查询。

INSERT INTO M_Employee_Login(Column1, Column2, Column3)
SELECT vAL1,vAL2,vAL3 from Staging_Table
EXCEPT
SELECT Column1, Column2, Column3 FROM M_Employee_Login


文章来源: SSIS OLEDB Command transformation (Insert if not exists)