积极答复者
触发器根据列名如何变?

问题
-
有一个收入表ReceivableTable,其中有12个月的租金收入,分别是MonthRent01、MonthRent02......MonthRent12,另外有12个月的押金,分别是LeaseAssureMoney01、LeaseAssureMoney02......LeaseAssureMoney12。我想写一个这样的触发器:当我给某个月的租金收入输入数值时,与它同月的押金会自动根据上一期的押金生成本月数值。例如:给MonthRent05输入数值,就会自动按照LeaseAssureMoneyR04的数值生成LeaseAssureMoneyR05的值。
C# 菜鸟中的雏鸟!提的问题也许很幼稚,但我是认真的。希望看在党国的面子上拉兄弟一把!
答案
-
类似这样,通过 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 ;
- 已建议为答案 Molly Chen_Moderator 2012年5月28日 6:36
- 已标记为答案 Molly Chen_Moderator 2012年6月1日 1:54
-
--貌似表设计成这样更为合理 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 */ --我觉得直接更新的时候找到上个月的结果参与计算即可,不需要用触发器
- 已标记为答案 Molly Chen_Moderator 2012年6月1日 1:55
全部回复
-
类似这样,通过 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 ;
- 已建议为答案 Molly Chen_Moderator 2012年5月28日 6:36
- 已标记为答案 Molly Chen_Moderator 2012年6月1日 1:54
-
--貌似表设计成这样更为合理 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 */ --我觉得直接更新的时候找到上个月的结果参与计算即可,不需要用触发器
- 已标记为答案 Molly Chen_Moderator 2012年6月1日 1:55