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

时间:2015-11-26 11:33:12

标签: sql-server if-statement triggers sql-server-2012 calculated-columns

我的触发器出了问题:它不会识别我的表,它存储了我需要数据的计算列。

我的表看起来像这样,由多个计算列组成: my 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;

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

2 个答案:

答案 0 :(得分:1)

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

似乎你想估计一些插入的数据。但是,可以插入或更新多行。

创建测试表:

CREATE table balance(in_months int)

创建触发器。我为In_Months可以除以12的每行选择3

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

插入表格以激活触发器:

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

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

答案 1 :(得分:-1)

使用alter

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;