是英雄的都爱美女的,快来啊!

解决方案 »

  1.   

    这问题不错,
    可以用函数+check约束来处理,也可以用函数+触发器来处理,都差不多,就只说一种了函数+check约束:
    --建立环境
    create table pmc_file (
    pmc01           varchar(10),
    pmc02            varchar(10)
    )
    goinsert 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
    endgo--建立约束
    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'。
    语句已终止。
      

  2.   

    少考虑了情况了, 若是下级的下级的下级 (N级)时候添加一个是上级   怎么判断有点难理解,有空的时候我详细叙说