【发布时间】:2017-06-20 09:21:00
【问题描述】:
我想在 SQL Server 2012 中实现一个触发器,当更新查询被触发到表的列时,应该将该特定列中的现有值与新值进行比较。
如果新值更大,则只有表应该更新,否则不更新。
【问题讨论】:
标签: sql triggers sql-server-2012 sql-update database-trigger
我想在 SQL Server 2012 中实现一个触发器,当更新查询被触发到表的列时,应该将该特定列中的现有值与新值进行比较。
如果新值更大,则只有表应该更新,否则不更新。
【问题讨论】:
标签: sql triggers sql-server-2012 sql-update database-trigger
请使用以下方法:
CREATE TRIGGER trigger_For_Update1
ON TableName
FOR UPDATE
AS BEGIN
DECLARE @n_OldValue int,
@n_NewValue int
SELECT
@n_OldValue = b.ValuesYouCompare,
@n_NewValue = a.ValuesYouCompare -- Update Old and New values
FROM
inserted a, deleted b
IF @n_NewValue > @n_OldValue
BEGIN
PRINT 'Transaction Error'
ROLLBACK TRAN -- Roll Back the transaction if condition is not valid
END
END
【讨论】:
UPDATE 语句导致此触发器触发更新 25 行,您将触发触发器一次,但随后Inserted 和 deleted 伪表将分别包含 25 行。您的代码将在这 25 行中选择哪一行? SELECT ... FROM Inserted i - 它是非确定性的,您将获得任意一行,您将忽略所有其他行。
JOIN 语法-92 SQL 标准(25 年前),不鼓励使用它