我现在要级联删除数据,比如表1是公司表company 表2是员工表person
company person
id     depart p_number         id     name   depart_id
1      软件部   2 1 张三    1
2      财务部   0 2 李四    1例如张三和李四都是软件部的
我想在删除部门的时候 把部门里面的员工都删除掉,每次执行时,部门人数1人时,正常删除,在两个人以上 就都报下面的错:
“异常详细信息: System.Data.SqlClient.SqlException: 子查询返回的值多于一个。当子查询跟随在 =、!=、<、<=、>、>= 之后,或子查询用作表达式时,这种情况是不允许的。语句已终止。”
触发器里面是这样的:
CREATE TRIGGER Del_depart ON dbo.company 
FOR DELETE
AS
delete from person where  departmentnumber  in(select  id  from deleted)
我试过设定外键约束后,用2000的级联删除功能,效果和使用这个触发器一样的,都是两人以上不能删除
请问触发器怎么写,可以同时删除多人呢,哪位大虾帮帮我啊

解决方案 »

  1.   

    从提示的错误来看,我觉得不是触发器的问题,楼主删除部门的SQL中是不是什么地方想使用表两子查询,但是那个子查询返回了多行,所以出错了。你的删除语句怎么写的
      

  2.   

    从提示的错误来看,我觉得不是触发器的问题,楼主删除部门的SQL中是不是什么地方想使用标量子查询,但是那个子查询返回了多行,所以出错了。你的删除语句怎么写的
      

  3.   

    “异常详细信息: System.Data.SqlClient.SqlException: 子查询返回的值多于一个。当子查询跟随在 =、!=、<、<=、>、>= 之后,或子查询用作表达式时,这种情况是不允许的。语句已终止。”
    这句错误提示肯定是别处报的
      

  4.   

    小弟第一次发帖,谢谢关注啊,呵呵,怎么能给你们加分??
    我现在没有写删除person是语句,程序里面只有删除 部门的语句,就是报这个错
    就这么一句,得到要删除的部门的ID 就执行删除操作:
    string del_sql = string.Format("delete from company  where id ={0}",del_ID);
    删除员工的语句已经被我屏蔽掉了,本来想依靠触发器来删除员工的,可是不会啊
      

  5.   

    CREATE TRIGGER Del_depart ON dbo.company 
    FOR DELETE
    AS
    delete person 去掉from 
    where  departmentnumber  in(select  id  from deleted)
      

  6.   

    "delete from company  where id ={0}"可能就是这个东西有问题,检查一下,id只能等于唯一的值,错误提示说明,id后面的值多于一个。
      

  7.   

    谢谢roy_88,我试了一下,去掉from了 可是还是不行,问题依旧啊,还是多谢关注了
      

  8.   

    回smart_zcg 我传入的ID就是部门的ID,这个ID是company的主键,没有重复的,而且我就一个参数ID,就按照传入的ID来删除对应的部门的,只是这个部门里面有两个员工,我是不太明白啊
      

  9.   

    如果你知道部门id的话,你把delete from company  where id = id值 这个语句在sql 查询分析器里面执行一下,如果没有特殊的设置,我觉得应该不会有问题的,启用级联删除后应该能够删除员工。
      

  10.   

    我在查询分析器里面执行
    delete from  ManagementSystem.dbo.company where id = 5
    结果提示:
    服务器: 消息 512,级别 16,状态 1,过程 number,行 5
    子查询返回的值多于一个。当子查询跟随在 =、!=、<、<=、>、>= 之后,或子查询用作表达式时,这种情况是不允许的。
    语句已终止。
    执行别的语句没有错误,而且还是依然只可以删除 只有一个员工的部门
      

  11.   

    难道是我程序有问题吗? 我在传入ID后,然后写是下面这句sql语句
    string del_sql = string.Format("delete from company  where id ={0}",del_ID);
    下面就是连接数据库,连接后执行下面语句:
    SqlCommand  Comm = new SqlCommand(del_sql,MyConn);
       Comm.ExecuteNonQuery();
    应该没什么错误吧,因为删除只有一个人所在的部门是没有问题的,只是两人以上,就报错了
    我也不知道我哪错了,郁闷啊
      

  12.   

    你看看你的company有没有,del触发器吧,我觉得是某个触发器惹的祸
      

  13.   

    那个叫做number的,应该就是惹祸的触发器
      

  14.   

    smart_zcg太感谢你了  问题搞定了 就是number触发器的问题
    那个number触发器是用来删除员工时 让我的部门人员数量减一个的
    代码如下:
    CREATE TRIGGER number ON dbo.person 
    FOR  DELETE 
    ASupdate company set staffnumber=staffnumber-1 where ID in(select departmentnumber from deleted)
    本来最后一句是“where ID =”的,改成in 就好了 没有错误了 一切正常
    可是我不太明白什么时候用 “=” 什么时候用in啊 
    你能给我讲讲吗
      

  15.   

    sql语句问题
    我遇见N此这种问题了
    在查询分析其中在好好测试