SSIS union all vs sql server Union All

时间:2017-04-07 20:30:21

标签: sql-server tsql ssis sql-server-2012 union-all

我使用SQL Server 2012和SSIS。我在同一台服务器和同一个数据库中有两个表。我需要将两个表的所有记录都转移到第三个表中。

我需要在UNION ALL的结果中添加一些列(如执行ID和一些包参数),之后我必须将记录转移到第三个表中。

我有两个解决办法,但我不知道哪些更有效。

解决方案1:使用两个OLE DB DataSource并在SSIS中使用Union All Component

enter image description here

解决方案2:在SQL Server端使用Union All,在SSIS中只使用一个OLE DB Source

enter image description here

哪一个更有效率?

3 个答案:

答案 0 :(得分:2)

尽可能使用数据库操作。如果2个表位于同一个数据库中,则绝对没有理由支持SSIS操作而不是查询优化器。 Union All是一个无阻塞操作,因此在这种情况下几乎没有区别,但如果这是一个连接或更复杂的操作,那么查询优化器就会起作用。

使用数据库解决方案作为经验法则。

答案 1 :(得分:0)

您还可以考虑在简单的执行SQL任务中执行此操作。

Insert into T3
select * from T1
union all
select * from T2

答案 2 :(得分:0)

很抱歉不同意Cafe Con Leche,但是一旦您对SSIS感到满意,您应该始终使用SSIS任务而不是TSQL。除排序操作外,SSIS通常速度更快,并且可以非常容易地设置错误处理(包括“坏”行被重定向以便稍后处理/修复)和日志记录。几乎所有可以在SSIS中完成的事情都可以在TSQL中完成(特别是如果你习惯使用sp_cmdshell),但是在SSIS中内置的TSQL中进行日志记录和错误处理要困难得多。