【问题标题】:Bulk insert. What is it really?批量插入。它到底是什么?
【发布时间】:2015-02-03 02:18:55
【问题描述】:

我正在为我正在做的一些事情做一些阅读和研究。我知道批量插入做什么以及如何做。虽然我在一个街区。使用 sql 触发器,您可以在插入时做一些很酷的事情。但是批量插入会发生什么。主要是。批量插入是否在普通上下文中执行类似的操作

Insert into table values('some value')--->sql triger
Insert into table values('some value')--->sql triger
Insert into table values('some value')--->sql triger

等等。 在这种情况下,在每一行之后都会触发一个插入触发器,并且 sql 将一直等到完成,直到到达下一行。

我在这里阅读了on bulk inserts 并发现它总是会更好。但这如何影响插入的触发器?为任何不好的解释或任何事情道歉。

【问题讨论】:

    标签: sql-server


    【解决方案1】:

    据记载,触发器不会在批量插入时运行。

    但是您可以批量插入临时表,然后执行 INSERT INTO SELECT FROM TEMP TABLE 并获得所有优势 - 快速上传和触发器等运行。

    如果你使用 C#,那么这也避免了 SqlBulkCopy 类中可怕的锁定代码(在桌子上)。

    【讨论】:

    • 我喜欢简单的解决方法,但我真的不明白到底发生了什么。有了解决方案,我还有另一个问题,稍后我会添加到我的问题中。
    • 另一个你没有添加的问题,你问它 - 在一个单独的问题中。这个得到了答案。
    【解决方案2】:

    在 SQL 中,表上的触发器可以按行或按语句执行。您所描述的行为是每行执行的触发器的特征,但 SQL Server 的 SQL 风格(称为 Transact-SQL)不支持它们。 SQL Server 中只有每个语句的触发器。

    此外,如果您所说的“批量插入”是指 Transact-SQL 的特定 BULK INSERT 语句,那么 TomTom 在他的回答中所说的几乎是正确的:触发器不会在 BULK INSERT 上执行 默认情况下。您可以通过添加 FIRE_TRIGGERS 子句来指定它们,在这种情况下,每个插入触发器将在每个语句中执行一次,如前所述。

    【讨论】:

      猜你喜欢
      • 2011-11-18
      • 2013-09-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-04-18
      相关资源
      最近更新 更多