【问题标题】:Trigger is deleted when drop and create the table, how to handle this in a process which requires to drop the table删除和创建表时触发器被删除,在需要删除表的过程中如何处理
【发布时间】:2018-09-21 10:42:52
【问题描述】:

有一个进程有巨大的ETL进程,最后它把数据转储到Ddatabase ABC的表X中 我想在不同服务器的数据库 DEF 上的表 Y 上创建该表的镜像。

我为此创建了一个触发器,它将在插入表时推送数据。 但后来才知道 ETL 过程会删除表并重新创建它。 这也会导致触发器丢失。

我可以通过什么方式实现此过程以在另一个服务器数据库上制作表的精确副本。

编辑:
a) 我对 ETL 过程没有任何控制权。因此,我无法对其进行任何修改,并希望保持流程离散。
b) 我无法截断表 Y,因为链接服务器不支持 DDL,因此我想删除表 Y 然后插入

【问题讨论】:

  • 建表后重新创建触发器?但是,这可能会使您的 ETL 非常慢(因为它会加载到您的表中,并继续触发触发器)。当 ETL 进行时,您希望在另一台服务器上发生什么?如果表在服务器 A 上被删除,您是否希望它在服务器 B 上被删除?在另一台服务器上配置链接服务器会不会更容易?
  • 不应在其他服务器上删除表。但是,触发器将删除表 Y 中的所有数据,并将表 X 中存在的所有数据插入其中。 P.S:我不想对现有的 ETL 流程进行任何更改
  • 嗨。请通过帖子编辑进行澄清,而不是 cmets。
  • 当然...我会编辑帖子。

标签: sql-server database-design triggers


【解决方案1】:

我可以通过什么方式来实现这个过程来制作一个精确的副本 另一个服务器数据库上的表

最好的方法是使用SQL Server Replication

如果出于任何原因您希望在重新创建的表上重新创建触发器,您可以使用DDL Triggers,它应该在创建表时创建您的触发器。

附:为什么不使用TRUNCATE 表(如果需要禁用索引)而不是drop/create

【讨论】:

  • >>你为什么不使用 TRUNCATE 表(如果需要禁用索引)而不是删除/创建?你是对的。但我无法控制 ETL 过程,否则会这样做。谢谢!
猜你喜欢
  • 1970-01-01
  • 2012-08-02
  • 1970-01-01
  • 1970-01-01
  • 2020-09-30
  • 2017-06-26
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多