【发布时间】:2017-09-23 13:42:33
【问题描述】:
在 SQL Server 中,触发器何时被触发?
问题是,我有一个要插入 45,000 条记录的表。 我想将所有 45k 记录复制到其他表。 但我不希望触发器在每次插入时都运行,即 45000 次触发器。
我的触发器基本上是将记录从 TableA 复制到 TableB。
触发器:
Create trigger tri_1
on TableA
after insert
as
Begin
Insert into TableB (ID,Name,Others)
select ID,Name,Others from TableA
inner join inserted
on inserted.ID = TableA.ID
End
以上只是我的触发器的模板。
另外,我有一个问题,上面提到的触发器,它是如何工作的?喜欢为每一行触发还是在所有插入完成后触发?
【问题讨论】:
-
不能只使用 SELECT * INTO new_table FROM old_table 吗?
-
嗯,这让我有点困惑。我写了这个触发器,假设 45K 记录的批量插入意味着 45K 插入语句。我这样做是为了避免重复数据,因为我将使用 *(这意味着所有记录,新输入的和旧的)
-
@stefan 如果我使用您的查询,假设在我的表中插入了 40K 条记录,如果触发器在之后触发,假设插入 200 条记录,下次触发器触发时......它将再次复制旧的 200 条记录和新的 200 条记录...所以在这种情况下,我需要确保仅在插入所有 40K 后触发触发器
-
如果我理解正确,您想将一个表(的内容)复制到一个新表中。为此,我不会使用触发器。我只需从旧表中选择我需要的所有内容,然后将结果集“粘贴”到新表中(原样)。我写了一个小例子(注意:只有一个 CREATE TABLE ...)dbfiddle.uk/…
-
不,实际上我们是从SAP获取数据,所以当数据插入TableA时,我们需要将它复制到TableB中,这就是为什么需要触发器!
标签: sql sql-server