none
触发器根据列名如何变? RRS feed

  • 问题

  •     有一个收入表ReceivableTable,其中有12个月的租金收入,分别是MonthRent01、MonthRent02......MonthRent12,另外有12个月的押金,分别是LeaseAssureMoney01、LeaseAssureMoney02......LeaseAssureMoney12。我想写一个这样的触发器:当我给某个月的租金收入输入数值时,与它同月的押金会自动根据上一期的押金生成本月数值。例如:给MonthRent05输入数值,就会自动按照LeaseAssureMoneyR04的数值生成LeaseAssureMoneyR05的值。

    C# 菜鸟中的雏鸟!提的问题也许很幼稚,但我是认真的。希望看在党国的面子上拉兄弟一把!

    2012年5月25日 3:15

答案

  • 类似这样,通过 UPDATE 来确定更新的列

    CREATE TRIGGER TR_tb_update
    	ON dbo.tb
    	FOR UPDATE
    AS
    IF UPDATE(MonthRent02)
    	UPDATE TB SET
    		LeaseAssureMoney02 = TB.LeaseAssureMoney01
    	FROM dbo.tb TB
    		INNER JOIN inserted I
    			ON I.id = TB.id
    	;
    ELSEIF UPDATE(MonthRent03)
    	UPDATE TB SET
    		LeaseAssureMoney03 = TB.LeaseAssureMoney02
    	FROM dbo.tb TB
    		INNER JOIN inserted I
    			ON I.id = TB.id
    	;

    2012年5月25日 4:27
  • --貌似表设计成这样更为合理
    create table ReceivableTable ([月份] int,[租金收入] int,[押金] int)
    insert ReceivableTable
    select 1,800,100 union all
    select 2,800,100 union all
    select 3,800,100 union all
    select 4,900,100 union all
    select 5,900,100 union all
    select 6,900,100 union all
    select 7,900,100 union all
    select 8,1000,200 union all
    select 9,1000,200 union all
    select 10,1000,200 union all
    select 11,1000,200 union all
    select 12,1000,200
    
    select * from ReceivableTable
    /*
    月份          租金收入        押金
    ----------- ----------- -----------
    1           800         100
    2           800         100
    3           800         100
    4           900         100
    5           900         100
    6           900         100
    7           900         100
    8           1000        200
    9           1000        200
    10          1000        200
    11          1000        200
    12          1000        200
    */
    
    --我觉得直接更新的时候找到上个月的结果参与计算即可,不需要用触发器

    2012年5月25日 5:33
    版主

全部回复

  • 类似这样,通过 UPDATE 来确定更新的列

    CREATE TRIGGER TR_tb_update
    	ON dbo.tb
    	FOR UPDATE
    AS
    IF UPDATE(MonthRent02)
    	UPDATE TB SET
    		LeaseAssureMoney02 = TB.LeaseAssureMoney01
    	FROM dbo.tb TB
    		INNER JOIN inserted I
    			ON I.id = TB.id
    	;
    ELSEIF UPDATE(MonthRent03)
    	UPDATE TB SET
    		LeaseAssureMoney03 = TB.LeaseAssureMoney02
    	FROM dbo.tb TB
    		INNER JOIN inserted I
    			ON I.id = TB.id
    	;

    2012年5月25日 4:27
  • --貌似表设计成这样更为合理
    create table ReceivableTable ([月份] int,[租金收入] int,[押金] int)
    insert ReceivableTable
    select 1,800,100 union all
    select 2,800,100 union all
    select 3,800,100 union all
    select 4,900,100 union all
    select 5,900,100 union all
    select 6,900,100 union all
    select 7,900,100 union all
    select 8,1000,200 union all
    select 9,1000,200 union all
    select 10,1000,200 union all
    select 11,1000,200 union all
    select 12,1000,200
    
    select * from ReceivableTable
    /*
    月份          租金收入        押金
    ----------- ----------- -----------
    1           800         100
    2           800         100
    3           800         100
    4           900         100
    5           900         100
    6           900         100
    7           900         100
    8           1000        200
    9           1000        200
    10          1000        200
    11          1000        200
    12          1000        200
    */
    
    --我觉得直接更新的时候找到上个月的结果参与计算即可,不需要用触发器

    2012年5月25日 5:33
    版主