首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

当删除一条记录时,更改表中字段的内容?该如何解决

2012-01-22 
当删除一条记录时,更改表中字段的内容?当删除一条记录时,更改表中字段的内容?现在的需求是这样的:比如说有

当删除一条记录时,更改表中字段的内容?
当删除一条记录时,更改表中字段的内容?


现在的需求是这样的:
比如说有表a如下:
cid c_no
1 20090501
2 20090502
3 20090503


当删除表中第一条记录时,第二条和第三条中的c_no就变成20090501,20090502
觉得好像需要使用游标才能搬到,请高手给指点一下,谢谢啦!



[解决办法]

SQL code
if object_id('tb') is not nulldrop table tbgocreate table tb(cid int,c_no varchar(8))insert tb select 1,'20090501'insert tb select 2,'20090502'insert tb select 3,'20090503'insert tb select 4,'20081231'select * from tb--创建触发器if object_id('tri_update') is not nulldrop trigger tri_updategocreate trigger tri_update on tbfor deleteasbegin    declare @cid int    select @cid=cid from deleted    update tb    set c_no=convert(char(8),dateadd(day,1,c_no),112)    where cid>@cidendgo--删除cid=2delete from tbwhere cid=2--查看数据    select * from tb--删除触发器和表drop trigger tri_updatedrop table tb/*(1 行受影响)(1 行受影响)(1 行受影响)(1 行受影响)cid         c_no----------- --------1           200905012           200905023           200905034           20081231(4 行受影响)(2 行受影响)(1 行受影响)cid         c_no----------- --------1           200905013           200905044           20090101(3 行受影响)*/
[解决办法]
SQL code
create table test(cid int ,c_no datetime)insert testselect       1,          '20090501' union select 2,          '20090502' union select 3,          '20090503' create trigger t_teston test after delete asupdate test set c_no = dateadd(day,-1,c_no)from testdelete   from  test where c_no='20090501'select * from test---2    2009-05-01 00:00:00.0003    2009-05-02 00:00:00.000
[解决办法]
看来这个字段的值不必存于数据库,因为只是给人看的
不过用户可能需要以此字段来查找,所以又需要能被检索。

方案:
1、存储与显示:数据库里存 年月部分,配合 row_number()得序号字段,组合成该值以供查看。
2、检索:对于用户输入 20090512 之类的值,解析为年月以及序号,用 1的办法 取出带序号的记录集,
即可匹配。
[解决办法]
这个在财务软件中有用到,就是记账凭证号,当作废一张凭证后就要整理断号以保证号码的连续性,不过它有一个前提就是每个月必须结完账后才能做下一个月的,这样整理起来也就是一个月的数据量,对数据库压力不大,如果整个库每改一次都整理一次,有个几万十万的数据的时候,哭都哭不出来了!
[解决办法]
探讨
引用:
这个在财务软件中有用到,就是记账凭证号,当作废一张凭证后就要整理断号以保证号码的连续性,不过它有一个前提就是每个月必须结完账后才能做下一个月的,这样整理起来也就是一个月的数据量,对数据库压力不大,如果整个库每改一次都整理一次,有个几万十万的数据的时候,哭都哭不出来了!
还是老兄您理解我的意思

热点排行