通过存储过程或触发器导入数据

时间:2016-03-10 15:56:30

标签: database sql-server-2008 stored-procedures import database-trigger

我们有一个遗留系统(MAS200,如果您需要知道),并且有一个旧的vbs脚本从MAS中提取数据并在我们的生产SQL数据库中填充两个临时表。经过一些处理/清理后,数据会进入实际表格。

Data flow : MAS200 --> Staging tables --> Production table

为了简化考虑,有一个“Order”父表和一个“Items”子表。订单可以有多个项目,每个项目记录都有一个FK OrderId。因此,在导入期间,我们首先导入订单数据并在“订单”表中创建一个条目,然后获取“项目”条目并导入它们。

基于TRIGGER的现有方法 - 目前我们有两个TRIGGER - 每个登台牌上有一个(订单和物品)。因此,每个新插入都被点击,并且在处理数据之后,将新条目插入到实际生产表中。我唯一关心的是为每个Items条目而不是BULK insert执行触发器。而且似乎不太可管理。

基于SP的方法 - 如果我删除了两个TRIGGER,然后将数据导入到临时表中,最后执行一个SP,它将导入Order数据,然后在Items表中执行BULK插入。这会更有效/更快吗?

它不是一个比较实际上只是一个差异设计。我想知道哪一个看起来更好,或者是否有第三种更好的方法从MAS导入生产SQL db。

编辑1:谢谢。 正如许多人所要求的那样 - 数据量不大或太频繁。让我们每小时说出10-12个订单(20-30个订单)。还有TRIGGERs,我们认为我们没有获得TRANSACTION,但只有两个简单的TRIGGER就足够了。我相信SP需要更多的脚本。

目标:需要尽可能保持简洁,干净和高效。

2 个答案:

答案 0 :(得分:1)

使用触发器:

  • 优点: 数据同步是实时的。当您通过数据输入创建数据时,数据量不应该很大,因此批量插入不会有很大改进。使用触发器的性能足够好
  • 缺点: 数据同步不是实时的,如果连接在MAS200和生产之间断开,那么你将遇到一个大问题。另外(正如你所提到的)你不能进行交易,这是一个很大的问题。

我建议您使用SP以时间间隔传输数据(如果您可以容忍同步延迟)。

答案 1 :(得分:0)

如果你真的想快速接近,你需要:

1)在负载期间禁用ITEMS表上的FK

2)然后加载ORDERS,然后启用FK

所有这一切都应该使用SP完成,触发方法是安全的,但当它来到大容量负载时非常慢

我希望你会发现它很有用

谢谢