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

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

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