sql代码/逻辑

时间:2010-10-28 18:36:23

标签: sql-server-2005

我有一个名为project的自引用表,它在父项目和子项目,子项目之间具有主要的详细信息关系......

其中一个字段是releaseId,我需要确保父项目的发布ID对于它的所有子项都是相同的...

表字段是projectId,parentProjectId,releaseId

任何人都知道如何在sql 2005中运行这样的报告?

2 个答案:

答案 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