create table BB
(编号 varchar(20) not null  PRIMARY KEY CLUSTERED ,
名称 varchar(20) UNIQUE NONCLUSTERED ,
数量 int
)
create table AA 
(编号 varchar(20) not null  PRIMARY KEY CLUSTERED REFERENCES BB (编号)  ON DELETE  CASCADE  ON UPDATE CASCADE ,
供应商 varchar(20) 
)1 约束只对删除BB表数据时AA表的可以同时删除
CREATE TRIGGER tr_AA_del ON dbo.AA
FOR delete
ASif exists( select 1 from BB where 编号 in (select 编号 from deleted))
print'warning'
2  用触发器
CREATE TRIGGER tr_AA_del ON dbo.AA
FOR delete
ASdelete BB where 编号 in (select 编号 from deleted)

解决方案 »

  1.   

    happydreamer(小黑-从头学起),先谢谢你回答我的问题
    但我还是不怎么明白你的回答我的问题是
    1.怎样限制用户删除主键表的记录(或者提示用户,当外键表存在该记录的行时)
    2.删除主键表的行的同时会不会删除外键表的记录,如果会,怎样让他不删除呢?
      

  2.   

    1 可以在前台做个检查,如果外键表存在记录,就不让删除
    后台可以触发器里控制
    CREATE TRIGGER tr_AA_del ON dbo.AA
    FOR delete
    ASif exists( select 1 from BB where 编号 in (select 编号 from deleted))
    begin
    print 'cannot delete'
    rollback tran2 
    如果设置了级联更新,那么删除BB表中的记录时AA表的相应项会删除
    反过来不会
    end
      

  3.   

    1 可以在前台做个检查,如果外键表存在记录,就不让删除
    后台可以触发器里控制
    CREATE TRIGGER tr_AA_del ON dbo.AA
    FOR delete
    ASif exists( select 1 from BB where 编号 in (select 编号 from deleted))
    begin
    print 'cannot delete'
    rollback tran2 
    如果设置了级联更新,那么删除BB表中的记录时AA表的相应项会删除
    反过来不会
    end