CREATE TABLE Account(
account_no int,
balance real,
type_code int,
branch_no int,
Bcode int,
customer_no int,
CONSTRAINT account_pk PRIMARY KEY (account_no),
CONSTRAINT check_balance CHECK (balance>=0)
);
alter TRIGGER tr_check_accounts_in_accountTBL
ON account INSTEAD OF INSERT
AS
BEGIN
DECLARE @count int
DECLARE @bcode int
DECLARE @cusNo int
SELECT @bcode=bcode,@cusNo=customer_no
FROM inserted;
SELECT @count=COUNT(a.account_no)
FROM account a
WHERE [email protected] AND a.customer_no = @cusNo
print @count;
IF(@count<=5)
commit transaction
ELSE
rollback transaction
END
INSERT INTO account(account_no,balance,type_code,bcode,branch_no,customer_no)
VALUES(1,60000,1,1,1,1);
当我尝试将数据插入上述帐户表时,触发器触发并始终回滚事务。我不明白为什么。任何人都可以请解释 谢谢。插入触发器时不考虑条件是否触发
错误显示如下:
消息3609,级别16,状态1,2号线
在触发器中结束交易。该批次已被中止。
您需要重写触发器 - 假设它始终在“插入”中只有一行 - 这是** NOT * * 案子!如果您插入多行,则“插入”将包含**多于一行**,并且您的分配“SELECT @ bcode = bcode,@ cusNo = customer_no FROM inserted;'将任意选择其中一行(并忽略其余的部分)。您的触发器**需要在'Inserted'中插入多行** –
另外,由于您使用的是INSTEAD OF INSERT触发器,因此您需要在触发器中执行INSERT ** 。我不会在任何地方看到......在INSERT之后,您不应该调用“COMMIT” - 这会自动发生。如果您想中止操作,请使用'ROLLBACK'。 –
所以你试图做的是创建一个表,其中任何特定的'bcode'和'customer_no'组合不能超过5行? –