触发器更行上笔记录问题
有一个表:
tb(品名,开始日期,截止日期)
新增记录或修改开始日期后,更新同品名上笔记录的截止日期=新增记录的开始日期-1
[最优解释]
DECLARE @t TABLE(品名 VARCHAR(10),sd DATETIME ,ed DATETIME);
INSERT INTO @t SELECT 'a','2012-01-01','2012-05-05'
UNION ALL SELECT 'a','2012-02-06','2012-03-06'
UNION ALL SELECT 'a','2012-02-15','2012-05-05'
UNION ALL SELECT 'b','2012-02-06','';
--比入插入一条 'a','2012-02-20',''
INSERT INTO @t SELECT 'a','2012-02-20','';
SELECT * FROM @t;
;WITH cte AS (
SELECT rn=ROW_NUMBER() OVER(PARTITION BY 品名 ORDER BY sd ),* FROM @T
)
UPDATE a SET a.ed=b.sd-1 FROM cte a LEFT JOIN cte b ON a.品名=b.品名 AND a.rn=b.rn-1
WHERE b.品名='a' AND b.sd='2012-02-20' AND b.ed='' --这里是条件
SELECT * FROM @t
[其他解释]
补充一下:
记录如下:
品名 开始日期 截止日期
a 2012/11/1 2012/11/25
a 2012/11/26 //新增该记录时同品名上笔记录截止日期=新增记录的开始日期-1
修改开始日期:
品名 开始日期 截止日期
a 2012/11/1 2012/11/25
a 2012/11/26 2012/11/27
a 2012/11/28 2012/11/30 //加入修改该记录的开始日期为2012/11/29,那上笔记录的截止日期由2012/11/27更新为2012/11/28
[其他解释]
还有其它触发器写法吗?,楼上的弄了半天没实现。