我有三个表:
第一个表(XMMC):
XMMC_ID  XMMC            XMMC_BH
1 我          1
2 你          2
3 他          3
第二个表(YJZB):
YJZB_ID   YJZB      YJZB_FBH     YJZB_SBH
1 我我0        1 11
2 我我1        1 12
3 我我2        1 13
4 你你0        2 21
5 你你1        2 22
6 你你2        2 23
第三个表(EJZB);
EJZB_ID   EJZB           EJZB_FBH
1 我我我我1      11
2 我我我我2      11
3 我我我我3      11
4 我我我我4      12
5 我我我我5      12
6 我我我我6      12
7 我我我我7      13
8 我我我我8      13
9 我我我我9      13当我要删除XMMC_ID=1时(此时XMMC_BH=1),根据XMMC_BH=1删除YJZB表中的YJZB_FBH=XMMC_BH,和EJZB表中的相联记录.
(YJZB表是XMMC表的从表,EJZB表是YJZB表的从表)都是一对多的关系,怎么写SQL语句??
谢谢

解决方案 »

  1.   

    也就是说,当我删除XMMC表的XMMC_ID=1时,YJZB表中的YJZB_FBH=1的记录全部删除,和EJZB表中的所有项,因为EJZB中的记录刚好是YJZB表中所删除记录的子项
      

  2.   

    Use Cascade Foreign Key
      

  3.   

    能不能告诉我代码啊?我的SQL太菜了>
      

  4.   

    代码就不给了,下面给你个示例吧,自己看懂了解决问题就没有问题了
    级联更新也就是主表的更新、删除等都会对外表产生相应的更新、删除
    级联更新相关数据字段
    在外键定义的时候加 ON UPDATE  CASCADE 
    指定如果试图更新某行中的键值,而该行的键值由其它表的现有行中的外键所引用,则所有外键值也将更新成为该键指定的新值。如果在目标表上也定义了级联引用操作,则对在那些表中更新的键值同样采取指定的级联操作。例:create table dep(   --部门表
    id int not null CONSTRAINT PK_dep_id PRIMARY KEY NONCLUSTERED,
    name varchar(50)
    )
    gocreate table employee(   --员工表
    id int not null CONSTRAINT PK_emp_id PRIMARY KEY NONCLUSTERED,
    name varchar(50),
    depid int not null,
    CONSTRAINT FK_employee_dep FOREIGN KEY (depid)
       REFERENCES dep (id) ON UPDATE  CASCADE
    )
    goinsert dep select 2,'销售部'
    union all  select 3,'人事部'
    goinsert employee select 1,'张三',2
    union all  select 2,'李四',3goupdate employee set depid=1 where id=3
    select * from dep 
    select * from employee
    --看看以上语句出不出错,结果怎样,去掉 ON UPDATE  CASCADE,再看看级联删除相关数据记录在外键定义的时候加 ON DELETE  CASCADE 指定如果试图删除某行,而该行含有由其它表的现有行中的外键所引用的键,则也将删除所有包含那些外键的行。如果在目标表上也定义了级联引用操作,则对从那些表中删除的行同样采取指定的级联操作。
      

  5.   

    --存储过程
    create procedure DeleteData
    @XMMC_ID int,
    @ErrorNum int output
    as
       begin tran
          truncate table EJZB
          delete from YJZB where YJZB_FBH=(select XMMC_BH from XMMC where XMMC_ID=@XMMC_ID)
          delete from XMMC where XMMC_ID=@XMMC_ID
       if @@error<>0
          set @ErrorNum=@@error
       else
          commit
        return @ErrorNum    go
    头一回见你这种数据结构,还有删除整张表的,呵呵