【问题标题】:Trigger not firing for Multirow bulk Insert?触发器未触发多行批量插入?
【发布时间】:2012-09-11 09:19:37
【问题描述】:

我有一个插入后触发器,当我在表中插入一条记录时它工作正常。

ALTER TRIGGER [dbo].[Insert_Into_Questions_Table] 
ON  [dbo].[Questionmaster]
After Insert
AS 
BEGIN
Insert into Questions(Question_questionid,Question_questionname,Question_answer1,Question_answer2,Question_answer3,Question_answer4,Exam_examtypeid,User_Userid)
select Question_questionid,Question_questionname,Question_answer1,Question_answer2,Question_answer3,Question_answer4,Exam_examtypeid,User_Userid from Inserted
SET NOCOUNT ON;

-- Insert statements for trigger here

END

问题

当我尝试使用 C# 代码中的 BulkCopy 插入多条记录时,触发器不起作用。

【问题讨论】:

标签: c# asp.net sql-server triggers


【解决方案1】:

默认情况下,BULK INSERT 语句不执行触发器。但是,您可以使用 FIRE_TRIGGERS 限定符启用触发器:

http://msdn.microsoft.com/en-us/library/ms188365(v=sql.105).aspx

SQL Server 2005 及更高版本对触发器使用行版本控制,并将行版本存储在 tempdb 的版本存储中。在使用触发器批量导入大量数据记录之前,您可能需要扩展 tempdb 的大小以适应触发器对版本存储的影响。欲了解更多信息

http://msdn.microsoft.com/en-us/library/ms175492(v=sql.105).aspx

【讨论】:

  • 我需要在哪里使用 BulkInsert 语句?
  • 当你在这个表中插入批量数据时你是怎么做的?
  • 我正在使用我的 C# 代码中的 Sql BulkCopy 方法。
  • 试试这个 SqlBulkCopyOptions.FireTriggers
  • 使用 (SqlBulkCopy s = new SqlBulkCopy(dbConnection, SqlBulkCopyOptions.FireTriggers, null))
【解决方案2】:

每个语句而不是数据库上的每行触发一次触发器。因此,您需要更改插入批量记录的方式。

看看这篇 msdn 文章
http://msdn.microsoft.com/en-us/library/ms188365.aspx
这解释了如何在批量插入中使用触发器。

【讨论】:

    猜你喜欢
    • 2011-12-06
    • 1970-01-01
    • 2012-11-12
    • 1970-01-01
    • 2016-10-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多