我使用SQL Server 2012和SSIS。我在同一台服务器和同一个数据库中有两个表。我需要将两个表的所有记录都转移到第三个表中。
我需要在UNION ALL的结果中添加一些列(如执行ID和一些包参数),之后我必须将记录转移到第三个表中。
我有两个解决办法,但我不知道哪些更有效。
解决方案1:使用两个OLE DB DataSource
并在SSIS中使用Union All Component
解决方案2:在SQL Server端使用Union All
,在SSIS中只使用一个OLE DB Source
。
哪一个更有效率?
答案 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中进行日志记录和错误处理要困难得多。