我正在尝试创建一个“代替插入触发器”,不会允许名称为“john”的任何人将任何内容插入表中。我的问题是,即使我将名称更改为其他内容,查询也会成功,但值不会被添加。
非常感谢您的帮助。请留意HTML标签。
非常感谢您的帮助。请留意HTML标签。
CREATE TRIGGER InsteadOfTrigger
ON Question4
INSTEAD OF INSERT
AS
Declare @name varchar(50)
Declare @question varchar(50)
Declare @Answer char
Set @name = 'John'
IF (select Username from inserted) = @name
BEGIN
RAISERROR ('You have not paid up your fee', 10,1)
ROLLBACK TRANSACTION
END
ELSE
BEGIN
INSERT INTO question4
values (@name, @question, @Answer)
END
BEGIN
和END
语句混淆了。 你说查询成功了,我猜你的意思是它没有抛出错误。 尝试在IF
语句的两侧使用RAISERROR
,看看是否会抛出错误。 - Squirrel5853INSERT
语句插入了多行,那么Inserted
伪表将包含多行——在这种情况下,你使用(select Username from inserted)
语句选择的是哪些多行?你需要重写你的触发器以考虑**Inserted
中的多行**! - marc_s