日期:2014-05-17  浏览次数:20475 次

触发器更行上笔记录问题
有一个表:

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
------其他解决方案--------------------
还有其它触发器写法吗?,楼上的弄了半天没实现。