如何在 if/else 中使用计算列

How to use a computed column in an if/else

我的触发器出现问题:它无法识别我的 table,它存储了我需要从中获取数据的计算列。

我的 table 看起来像这样,由多个计算列组成:

我的问题出在 In_Months 列上,我的触发器的一部分如下所示:

CREATE TRIGGER [Balance_monthly]
ON [dbo].[Balance]
FOR INSERT, UPDATE
AS
BEGIN
    DECLARE @test int;
    DECLARE @amount int;
    SET NOCOUNT ON

    IF Balance.In_Months % 12 = 0
        SET @amount = 3;

它不允许我更新我的触发器,因为它找不到我的 table。

使用改变

ALTER TRIGGER [Balance_monthly] ON [dbo].[Balance]
FOR INSERT, UPDATE
AS
BEGIN
DECLARE @test int;
DECLARE @amount int;
SET NOCOUNT ON

IF In_Months % 12 = 0
    SET @amount = 3;

这是为您指明正确的方向。它没有给出有用的答案,只是一个有效的答案。它只是演示了触发器的工作原理。

您似乎想估计一些正在插入的数据。但是可以插入或更新多于 1 行。

创建测试table:

CREATE table balance(in_months int)

创建触发器。我为每一行选择 3,其中 In_Months 可以除以 12

CREATE TRIGGER [Balance_monthly]
ON [dbo].[Balance]
FOR INSERT, UPDATE
AS
BEGIN
    DECLARE @amount int;
    SET NOCOUNT ON

    SELECT @amount= sum(case when INSERTED.In_Months % 12 = 0 then 3 else 0 end)
    FROM INSERTED
    SELECT @amount
END

插入table以激活触发器:

INSERT balance(In_Months) values(12),(13),(24)

结果为 6(3*2),因为插入值中的 2 个(12 和 24)可以除以 12