我创建的这样的一个数据库:在仓库表上建了个触发器:
create trigger w_del
on 仓库 for delete
as
update 职工
set 仓库号 = null
where 仓库号 in(select 仓库号 from deleted)

然后删除仓库表上的一条记录:
delete from 仓库 where 仓库号='WH2'
结果:消息 547,级别 16,状态 0,第 1 行
DELETE 语句与 REFERENCE 约束"FK__职工__仓库号__060DEAE8"冲突。该冲突发生于数据库"订货",表"dbo.职工", column '仓库号'。

语句已终止。
好像是触发器不起作用
请问这是什么问题?

解决方案 »

  1.   

    因为你的这个职工号是dbo.职工表的外键,如果要删除该仓库号='WH2',需要先清除掉dbo.职工表中对应的仓库号='WH2'.
      

  2.   

    DELETE 语句与 REFERENCE 约束"FK__职工__仓库号__060DEAE8"冲突。该冲突发生于数据库"订货",表"dbo.职工", column '仓库号'。
    有约束 需要先删除约束 再创建触发器
      

  3.   

    建表的时候是这样建的:
    create table 仓库(
    仓库号 char(5) primary key,
    城市 char(10),
    面积 int check(面积>10))
    create table 职工(
    仓库号 char(5) foreign key references 仓库,
    职工 char(5) primary key,
    工资 int check(工资>=1000 and 工资<=5000) default 1200)


    create table 供应商(
    供应商号 char(5) primary key,
    供应商名 char(20),
    地址 char(20))

    create table 订购单(
    职工号 char(5) not null foreign key references 职工,
    供应商号 char(5) null foreign key references 供应商,
    订购单号 char(5) primary key,
    订购日期 datetime default getdate())