如何在插入时在 SQL Server 中创建触发器?

Posted

技术标签:

【中文标题】如何在插入时在 SQL Server 中创建触发器?【英文标题】:How can I create a trigger in SQL Server on insert? 【发布时间】:2013-12-01 20:42:35 【问题描述】:

我想在 SQL Server 2012 中创建一个触发器,当我将一行插入特定表时激活该触发器。

触发器必须在特定列中插入一个值,在我插入新行的同一个表和行中。

只有当我插入的行中的特定列没有值时,触发器才必须激活,即。空。

假设我正在插入:

表:car 列:car_make | car_price | car_img

如果我在插入中提供所有值:

car_make | car_price | car_img

触发器不得激活

但是,如果我只插入 2 列的值:

car_make | car_price

car_img 值为 null,则触发器必须激活并执行以下操作:

在同一受影响行的 car_img 列中插入预定义值

PS。我必须使用触发器,它用于分配。我不能使用默认值。

【问题讨论】:

您需要为表中的所有列设置默认值,而不是这个简单要求的触发器。 @MuhammedAli 我必须使用触发器,这是强制性的。这是一个任务。 触发这样一个简单的要求真的是过度杀戮,但无论如何请看我的回答。 附注:如果您有FOR INSERT 触发器,它将始终触发 - 您不能选择性地根据您的数据让它触发(或不触发)。您可以做的是在触发器代码中检查这些条件并根据需要处理情况 【参考方案1】:
Create Trigger tr_ForInserts_car
ON dbo.car
FOR INSERT
AS
BEGIN 
  SET NOCOUNT ON;


    UPDATE Car
     SET car_make = /*Your Default Value*/
     WHERE car_make IS NULL

     UPDATE Car
     SET car_price = /*Your Default Value*/
     WHERE car_price IS NULL

     UPDATE Car
     SET car_img = /*Your Default Value*/
     WHERE car_img IS NULL
END

编辑

我之前的建议是更新对应列为空的所有行,只更新新插入行的列请尝试以下操作

Create Trigger tr_ForInserts_car
ON dbo.car
FOR INSERT
AS
BEGIN 
  SET NOCOUNT ON;


     UPDATE Car
     SET Car.car_make = /*Your Default Value*/
     FROM Car INNER JOIN inserted
     ON Car.PrimaryKey = inserted.PrimaryKey
     WHERE Car.car_make IS NULL

     UPDATE Car
     SET Car.car_price = /*Your Default Value*/
     FROM Car INNER JOIN inserted
     ON Car.PrimaryKey = inserted.PrimaryKey
     WHERE Car.car_price IS NULL

     UPDATE Car
     SET Car.car_img = /*Your Default Value*/
     FROM Car INNER JOIN inserted
     ON Car.PrimaryKey = inserted.PrimaryKey
     WHERE Car.car_img IS NULL

END

【讨论】:

但这会更新 整个 表 - 不仅仅是正在插入的行(或行)......您可能想要加入 Inserted以某种方式将您的更新限制为当前实际插入的那些行 .... @marc_s 是的,这是正确的,但这是 OP 想要的,奇怪的要求,但你能说什么:) @MuhammedAli 我知道这有点奇怪,而且没有任何意义,但这是学校作业的要求。他们只是希望我们为了使用触发器而使用触发器。 @marc_s 看看现在我已经更新我的答案只处理新插入的行。 @MuhammedAli 好吧,如果我不能在某个地方学习它,我就不能自己做。 *** 给了我更可靠和经过筛选的答案,这比你在互联网上找到的随机东西要好得多。 *** 有专家社区不断检查信息是否正确,:-) 所以我猜信息的质量比在互联网上搜索要高。

以上是关于如何在插入时在 SQL Server 中创建触发器?的主要内容,如果未能解决你的问题,请参考以下文章

确定用户在 SQL Server 中创建的对象

在 SQL Server 中创建审核触发器

列值更改的 T-SQL (SQL Server 2016) 触发器,在插入

如何在 mongodb atlas 中创建插入触发器?

如何在 phpmyadmin 中创建触发器,插入后将更新花药表中的字段?

sqlserver,触发器做备份表如何插入当前时间?