2017-10-21 175 views
0

我有一个名为table1的源表,它每晚都用新数据填充。我必须上传4个关系表tblCus, tblstore, tblEmp, tblExp中的数据。我应该使用存储过程还是触发器来实现? 谢谢将源表中的数据加载到多个表中

+0

SSIS将是这个 – Harry

+0

一个很好的工具,您可以为此创建计划作业。 –

+1

创建一个工作并在里面添加你的scritpn –

回答

0

在SQL Server中,永远有不止一种方式来皮肤猫。从你的问题中,我假设你正在将来自OLTP风格数据库的4个表格非规范化为数据仓库风格应用程序中的单个维度。

如果数据库位于单独的实例上,或者只需要简单转换,则可以使用SSIS(SQL Server Integration Services)。

如果这是正确的,并且数据库驻留在同一实例上,那么您可以使用存储过程。

如果转换是更大负载的一部分,那么可以合并这两种方法,并使用SSIS编排转换,但只需在控制流中关闭存储过程即可。

我用来决定是否应该使用数据流或存储过程进行特定转换的一般规则是:数据流是我的预设,但是如果我需要数据流中的任何异步转换,我恢复到存储过程。这个通用规则通常给出了最佳的性能特征。

我会避免触发器,特别是如果针对4个表有大量的DML操作,因为每次修改都会触发触发器并可能导致性能下降。

+0

谢谢,皮特这非常有帮助。 – Ashraf

+0

@Ashraf如果它对你有帮助,请不要忘记注册和/或接受。谢谢。 –

0

如果它是一个简单的负载,可以使用DataFlow Tasktable1.

假设表1是你的源表中选择你的4个表。

然后你可以使用一个Conditional split task它的作用就像一个where子句,在这里你可以设置你的定义为tblCus, tblstore, tblEmp, tblExp,然后添加4个目的地这些。

看我的例子: Entire package

有条件拆分: Conditional split

+0

如果您不知道如何过滤它,也可以为每个表编写一个存储过程,然后在执行存储过程的ssis中创建4个执行SQL任务。有很多方法可以做到这一点:) – plaidDK

+0

感谢您花时间提供答案。这是因为像我们这样有帮助的同伴能够一起学习 – Ashraf

相关问题