我有一个名为project的自引用表,它在父项目和子项目,子项目之间具有主要的详细信息关系......
其中一个字段是releaseId,我需要确保父项目的发布ID对于它的所有子项都是相同的...
表字段是projectId,parentProjectId,releaseId
任何人都知道如何在sql 2005中运行这样的报告?
答案 0 :(得分:0)
使用公用表表达式可以非常有效地处理邻接列表。这可能是一种开始的方式。
答案 1 :(得分:0)
好的,这是未经测试的并做出一些假设。第一个假设是id数是整数,而releaseid永远不会是0.下一个假设是projectid是表的PK。最后的假设是你可以告诉父项目,因为parentid是空的。
现在唯一正确的方法就是触发器。这样,无论数据如何变化,它总是正确的。没有其他完全可靠的方法来确保数据保持同步。必须编写触发器来处理多个记录。此触发器是粗略的近似值,未经过测试。在使用之前,请务必彻底测试触发器(包括测试多个rcord插入和多记录更新)。
create trigger testtrigger on mytable
for insert, update
as
select inserted.projectid as parentid, inserted.releaseid as newreleaseid
into #changedparentreleaseid
from inserted i
join deleted d
on i.projectid = d.projectid
where i.parentid is null
and isnull(d.releaseid,0) <> isnull(i.releaseid,0)
update m
set releaseid = c.newreleaseid
from mytable m
join #changedparentreleaseid c
on c.parentid = m.parentid