triggers - SQL Server AFTER INSERT 触发器不起作用,触发器如何工作?
问题描述
我在表上插入后写了一个触发器,表上的特定列中的数字 5,但是在我执行插入之后,没有任何反应。我想知道我的代码中有什么错误,因此插入后什么也没有发生
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER TRIGGER [dbo].[trigger_EstadoDoc]
ON [dbo].[EstadoDoc]
AFTER INSERT AS
BEGIN
DECLARE @Puntaje1 INT;
DECLARE @Puntaje2 INT;
SET @Puntaje1 = (SELECT 5
FROM EstadoDoc, inserted
WHERE inserted.IdDoc = EstadoDoc.IdDoc
AND inserted.Estado IN ('A','RyR')
AND EstadoDoc.Estado = 'S')
SET @Puntaje2 = (SELECT 10
FROM EstadoDoc, inserted
WHERE inserted.IdDoc = EstadoDoc.IdDoc
AND inserted.Estado IN ('A')
AND EstadoDoc.Estado = 'RyR')
IF @Puntaje1 != NULL
BEGIN
UPDATE EstadoDoc
SET PuntajePrevio = @puntaje1
FROM EstadoDoc, inserted
WHERE inserted.IdDoc = EstadoDoc.IdDoc
AND inserted.Secuencia = EstadoDoc.Secuencia
END
IF @Puntaje2 != NULL
BEGIN
UPDATE EstadoDoc
SET PuntajePrevio = @puntaje2
FROM EstadoDoc, inserted
WHERE inserted.IdDoc = EstadoDoc.IdDoc
AND inserted.Secuencia = EstadoDoc.Secuencia
END
解决方案
查看我的所有评论 - 您基本上需要重写触发器以使用正确的基于集合的方法来处理多行插入,并且您需要养成使用正确的 ANSI/ISO JOIN语法(而不是弃用的逗号)的习惯FROM
子句中的分隔表列表)。
试试这样的 - 触发器看起来也更简单!
CREATE OR ALTER TRIGGER [dbo].[trigger_EstadoDoc]
ON [dbo].[EstadoDoc]
AFTER INSERT AS
BEGIN
SET NOCOUNT ON;
-- as per charlieface's recommendation - check to see if any rows
-- have actually been inserted at all - if not, bow out
IF (NOT EXISTS (SELECT * FROM Inserted))
RETURN;
UPDATE e
SET PuntajePrevio = 5
FROM dbo.EstadoDoc e
INNER JOIN inserted i ON i.IdDoc = e.IdDoc
AND i.Secuencia = e.Secuencia
WHERE e.Estado = 'S'
AND i.Estado IN ('A', 'RyR');
UPDATE e
SET PuntajePrevio = 10
FROM dbo.EstadoDoc e
INNER JOIN inserted i ON i.IdDoc = e.IdDoc
AND i.Secuencia = e.Secuencia
WHERE i.Estado = 'A'
AND e.Estado = 'RyR';
END
推荐阅读
- node.js - 查询 Mongodb 适用于终端但不适用于节点 js
- f# - 获取一条指令抛出的最后一条错误消息
- scala - 如何在 Spark Shell 中映射三个不同类型的元素?
- c++ - 使用 fstream 从 txt 文件中循环数字
- sql - SQL Server - INSERT 语句与 FOREIGN KEY 约束冲突
- react-native - 反应导航警告:“jumpToIndex 不是函数”
- r - R:编写一个返回向量的两阶段函数
- php - Godaddy 的问题 - AWS WordPress 网站
- angular - Angular - 迭代中的动态 CSS 类
- python - numpy.ndarray 形状(高度,宽度,n)来自每个图像像素的 n 个值