SQL触发器创建多部件标识符" ALIAS"无法受约束

时间:2015-11-12 08:01:39

标签: sql sql-server

我在制作触发器时遇到了一些问题。

我的任务是在新交易完成时检查所有账户的余额,如果余额不等于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都有坏的别名和内部联接。

1 个答案:

答案 0 :(得分:0)

使用:

IF EXISTS (SELECT 1 FROM inserted WHERE STATUS_ID  = 'COMPLETED')
BEGIN
 ....
END

inserted特殊表保存更新记录中的信息。它可能包含多个记录。因此,如果至少有一个更新的记录具有IF,则上述STATUS_ID = 'COMPLETED'语句中的谓词将为true。