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行? –