关于SQL Server里边列的计算

来源:百度知道 编辑:UC知道 时间:2024/09/22 20:31:36
比如我有表A,其中有列a,b,c,我现在有一个列j,其值等于a+b-c,a,b,c的值如果变化j也要跟着变化。我是应该把j放在表A中,还是放在其他表中,还是放在视图中?然后应该怎么操作?是用触发器吗?还是其他东西?
谢谢诸位大侠了,正确答案我给全分。
就是比如说a是基本工资,b是奖金,c是保险,j是实发,这么说更简单了吧?

三种较为有效的方式,各有特色:

1.如果可以改变表结构,那么加入一个自动计算的J列:
alter table 表A add J as A+B-C
执行后,表中的J列就会永远等于A+B-C

2.如果不能改变表结构,可以建视图的话,这样建立视图:
CREATE VIEW 视图名
as
SELECT *,j=a+b-c from 表A
GO
醒询时,直接调用视图就行了。(SELECT * FROM 视图名)

3.如果不能建视图,其实只要直接查询就可以了,查询语句是这样的:
SELECT *,j=a+b-c from 表A

第三种方法是取经济的,不用改变数据库的任何内容,直接查询。
但每一种方法和第二种方法也有优点,要看你怎么方便了。

请注意:使用触发器不行!

因为触发器一般只能在更新一条数据时起作用,而在批量更新数据时,是不行了。

有很多方法:
比如 触发器、视图 等等
触发器的缺点是效率不高,甚至可以说是很低,而且触发器建多了容易差生一些不易维护的错误,很多软件公司都命令禁止在数据库中使用触发器;
视图方便,但是如果一旦修改了原表的表结构,视图很可能失效哦!
效率最高且没有任何副作用,包括不产生冗余数据的方法是在原表上加一个引用列就可以了
ALTER TABLE TableA ADD J AS A + B - C
关于更多的信息,建议你查看联机丛书或其他的相关文档!
t_sql 爱好者:QQ群号 11859947,QQ:316784428,相互交流,共同进步!

使用触发器,因为实发工资是个有意义的列,存在表A中,在程序的处理中可以提高效率,视图的话也可以实现,但是效率低

create trigger trg_sfgz
on A
after insert,update
as update A set j=a+b-c from A join inserted b o