gpt4 book ai didi

mysql - sql 触发器 - if 语句 - 防止更新

转载 作者:行者123 更新时间:2023-11-29 13:50:41 26 4
gpt4 key购买 nike

我想创建一个触发器来防止输入的值高于特定值。

我读了一点,但无法将下面的问题与我自己的问题联系起来。

Trigger to fire only if a condition is met in SQL Server

代码:

ALTER TRIGGER Tgr_IQRating
ON dbo.Customer
FOR UPDATE
AS
BEGIN
SET NOCOUNT ON;

DECLARE @IQ int

Select @IQ = IQRATING from dbo.customer

IF (@IQ) > 150
BEGIN
PRINT ('Cannot enter anything higher than 100')
END

ROLLBACK TRANSACTION
END

我已经尝试过这样的

IF (IQRating) > 150 
BEGIN
PRINT ('Cannot enter anything higher than 100')
END

ROLLBACK TRANSACTION

但是出现找不到该列的错误。另外,当我尝试更新时,以下操作失败。

IF (SELECT IQRating FROM dbo.customer) > 150 
BEGIN
PRINT ('Cannot enter anything higher than 100')
END

错误:

Msg 512, Level 16, State 1, Procedure Tgr_IQRating, Line 16
Subquery returned more than 1 value. This is not permitted when the subquery follows =, !=, <, <= , >, >= or when the subquery is used as an expression.

任何帮助都会很棒。

谢谢

杰伊。

最佳答案

您应该使用特殊的“表”inserted 来查看正在更新的数据,否则您将看到整个表,其中还包含其他行。

IF EXISTS(SELECT 1 FROM inserted WHERE IQRating > 150)
BEGIN
PRINT ('Cannot enter anything higher than 150')
END

更好的解决方案是使用 RAISERROR 或在 SQL Server 2012 中使用 THROW 语句而不是 PRINT,以便发回错误消息发送给发起更新的人。

关于mysql - sql 触发器 - if 语句 - 防止更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16721237/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com