好吧,我试图写一个触发器,客户试图购买东西,但如果他通过他的信用卡限制,交易必须取消 .
我的表是:
客户(姓名,ssn, code ),
帐户(customer_code, acc_number ,余额,费率),
信用卡(已发行,已过期,限额,余额, cc_number ),
交易(日期,CC_NUMBER,charged_amount,** ** conf_numb呃,shop_code)
我写的是
create trigger check_balance on transactions
for insert
as
Declare @balance int,
@limit int
SELECT @balance = balance, @limit = limit
FROM creditcard INNER JOIN inserted i ON creditcard.cc_number = i.cc_number
IF (@balance + i.charged_amount > @limit)
BEGIN
ROLLBACK TRANSACTION
END
但我得到了一个
消息4104,级别16,状态1,过程check_balance,第10行无法绑定多部分标识符“i.charged_amount” . 其中第10行是IF(@balance i.charged_amount> @limit)我知道masg意味着我不能使用i . *,因为它的范围只在select..from中 . 我尝试使用引用新行作为我,但我在引用附近有一个语法错误 . 我正在使用MSSQL server 2005我对sql中的触发器不太熟悉,所以能帮帮我吗?
3 回答
试试这个:
您对标量变量的赋值不适用于多行插入 .
inserted
是一个可以包含任意数量行的表 .insert
甚至可能包含同一个信用卡的多个不同行,这些行单独可以,但总体上会超过帐户限制 .逻辑需要像......
我认为问题是你正在尝试使用别名i,当它只在你将其别名的查询的范围内时 . 请将IF语句中的引用更改为插入而不是i .