我正在使用sql server 2000.我的Tree结构表就在这里
tItem
ItemID int keyfield,
ParentItemID int,
Title nvarchar 200,
ChildCount int,
Status int
我需要计算ChildCount和Status触发器。当我插入一个项目时,父项目必须计算子计数和状态。 0<状态< 100
计算父母身份,如果父母有2个孩子,则计算子女孩身份,然后除以子女数。例如:80 + 100/2 此操作可以重复使用root父级。例如:
之前:
Project Child=1, Status=80
|-Module Child=1, Status=80
| |-Control Child=0, Status=80
插入表单项
后Project Child=1, Status=90 // 3 Calculate child and status
|-Module Child=2, Status=90 // 2 Calculate child and status
| |-Control Child=0, Status=80
| |-Form Child=0, Status=100 // 1 First. inserted row
这个例子有3个级别,也许我的表树结构级别大于32
如何创建此触发器?
答案 0 :(得分:1)
我认为你应该可以使用它:
create trigger on tItem after insert or update as
if (inserted.ParentItemID is not null)
update tItem set ChildCount = (select count(1) from tItem where ParentItemID=ItemID)
where ItemID = inserted.ParentItemID
-- calculate status here
go
那应该是,如果我还有我的所有弹珠,请点击并更新父级的ChildCount,然后再次触发相同的触发器并更新父级的ChildCount,直到父母用完为止。
但是,我强烈建议您更愿意使用视图或存储过程来动态计算这些数据 - 除非您的表格要用于静态存储此类数据,否则不是一个好主意被其他查询严重阅读。
答案 1 :(得分:1)
您应该能够在触发器中为插入的每一行调用UDF。
或者,如果树是可管理的并且不经常更改,则可以在插入任何插入后调用SP以重新计算整个树。
此外,在您的示例中,为什么当其唯一孩子的状态已更改为90时,根状态是否会更改为90?