[哈哈]送上美女一个,关于父子节点控制的问题
表名称 pmc_file
分类基本资料 上一级分类
pmc01 pmc02 ----这是表字段名称
001 (null)
002 (null)
003 001
004 001
005 002
006 003
现在要求我新增一笔基本资料 上级分类不允许是自己及自己的下级分类
如 001的上一级分类就不能是001 006的上一级分类是003
最高等级分类为NULL
高手帮我写一下,谢谢。。。。 送上美女一个
------解决方案--------------------这问题不错,
可以用函数+check约束来处理,也可以用函数+触发器来处理,都差不多,就只说一种了
函数+check约束:
--建立环境
create table pmc_file (
pmc01 varchar(10),
pmc02 varchar(10)
)
go
insert pmc_file select
'001 ', null
union all select
'002 ', null
union all select
'003 ', '001 '
union all select
'004 ', '001 '
union all select
'005 ', '002 '
union all select
'006 ', '003 '
go
--建立函数
create function fn_IsParent (
@pmc01 varchar(10),@pmc02 varchar(10)
)
returns int
as
begin
declare @t varchar(10)
set @t=@pmc01
while @t is not null and @t <> @pmc02
begin
set @pmc01=@t
select @t =pmc02 from pmc_file where pmc01=@pmc01
end
if @t=@pmc02
return 1
return 0
end
go
--建立约束
ALTER TABLE pmc_file WITH NOCHECK ADD
CONSTRAINT CK_12345 CHECK (dbo.fn_IsParent(pmc02,pmc01)=0)
go
--正常
update pmc_file
set pmc02= '002 '
where pmc01= '001 '
go
--冲突
update pmc_file
set pmc02= '006 '
where pmc01= '001 '
go
服务器: 消息 547,级别 16,状态 1,行 1
UPDATE 语句与 TABLE CHECK 约束 'CK_12345 ' 冲突。该冲突发生于数据库 'Test1 ',表 'pmc_file '。
语句已终止。
------解决方案--------------------建议函数+触发器。