我在制作触发器时遇到了一些问题。
我的任务是在新交易完成时检查所有账户的余额,如果余额不等于0,我必须回滚交易。
我的查询:
CREATE TRIGGER checkBalance
ON dbo.ONLINE_TRANSACTION
AFTER UPDATE
AS
IF dbo.ONLINE_TRANSACTION.STATUS_ID = 'COMPLETED' - !!! Error line
BEGIN
Declare @sumBalance NUMERIC = (select SUM(CURRENT_BALANCE) from dbo.ACCOUNT_DETAILS)
IF @sumBalance != 0 ROLLBACK
END
错误讯息 多部分标识符" dbo.ONLINE_TRANSACTION.STATUS_ID"无法受约束。
我希望有人帮助我。提前谢谢!
BTW我已经解决了问题,但我认为这不对:
CREATE TRIGGER checkBalance
ON dbo.ONLINE_TRANSACTION
AFTER UPDATE
AS
Declare @checkStatus char (36) = (select TOP 1 STATUS_ID
from dbo.ONLINE_TRANSACTION
order by dbo.ONLINE_TRANSACTION.CREATED_ON DESC)
IF @checkStatus = 'COMPLETED'
BEGIN
Declare @sumBalance NUMERIC = (select SUM(CURRENT_BALANCE) as Balance from dbo.ACCOUNT_DETAILS)
IF @sumBalance != 0 ROLLBACK
END
如果有人花时间解释我收到错误的原因,那会很棒。我一直在寻找答案,但没有找到任何有触发器的东西,大多数resoves都有坏的别名和内部联接。
答案 0 :(得分:0)
使用:
IF EXISTS (SELECT 1 FROM inserted WHERE STATUS_ID = 'COMPLETED')
BEGIN
....
END
inserted
特殊表保存更新记录中的信息。它可能包含多个记录。因此,如果至少有一个更新的记录具有IF
,则上述STATUS_ID = 'COMPLETED'
语句中的谓词将为true。