有可能是编码问题。
你试查找 一下
select * from mo_item where  单号='MO_0001' and   父货号='201'
能不能找到记录。
列最好不要用中文,

解决方案 »

  1.   

    执行delete(所影响的行数为 0 行),说明
    where  单号='MO_0001' and   父货号='201'的条件压根没满足,select应该也一样不知道单号和父货号都是什么数据类型?
      

  2.   

    select * from mo_item where  单号='MO_0001' and   父货号='201'是耶,查不到数据.  但我查了单号的确='MO_0001' 父货号='201'本来是我在写一个触发器. 如下:
    CREATE TRIGGER modetailinsert ON [dbo].[mo_detail] 
    FOR INSERT
    AS
    declare @MONO as varchar
    declare @item as varchar
    declare @num as decimal
    select @MONO=单号,@item=货号,@num=数量 from inserted
    delete from  mo_item  where 单号=@MONO and 父货号=@item   /* 这个有问题吗????*/
    insert into  mo_item (单号,父货号,货号,数量,单位)
    select  a.单号,a.货号,b.子货号,a.数量*b.用量*(1+b.损耗),b.单位 from inserted a  inner join bom b on a.货号=b.父货号
      

  3.   

    你应该这么测一下
    select * from mo_item where 单号='MO_0001' 
    select * from mo_item where 父货号='201'
    来确定是那个字段出毛病
    有时候M是全角时就会出错
      

  4.   

    --测试环境
    Create table mo_item([父货号] Varchar(5),[货号] Varchar(5),[数量] float(10),[单位] Varchar(5),[领料数量] int,[单号] Varchar(10))
    insert into mo_item select '201','101',12000.00,'KG',0,'MO_0001'
    union all select '101','102',2000.00,'KG',0,'MO_0001'
    union all select '201','104',6000.00,'KG',0,'MO_0001'go
    --SQL语句
    select * from mo_item where 单号='MO_0001' and 父货号='201'
    delete from  mo_item  where 单号='MO_0001' and   父货号='201'
    select * from mo_itemgo
    --删除表
    drop table mo_item/**结果
    所影响的行数为 3 行)父货号   货号    数量                       单位    领料数量        单号         
    ----- ----- ------------------------ ----- ----------- ---------- 
    201   101   12000.0                  KG    0           MO_0001
    201   104   6000.0                   KG    0           MO_0001(所影响的行数为 2 行)
    (所影响的行数为 2 行)父货号   货号    数量                       单位    领料数量        单号         
    ----- ----- ------------------------ ----- ----------- ---------- 
    101   102   2000.0                   KG    0           MO_0001(所影响的行数为 1 行)**/
      

  5.   

    我找到你的原因了,你仔细看看你条件中的'MO_0001' 中是'M0'还是'MO'
      

  6.   

    CREATE TRIGGER modetailinsert ON [dbo].[mo_detail] 
    FOR INSERT
    AS
    declare @MONO as varchar
    declare @item as varchar
    declare @num as decimal
    select @MONO=单号,@item=货号,@num=数量 from inserted
    delete from  mo_item  where 单号=@MONO and 父货号=@item   /* 这个有问题吗????*/
    insert into  mo_item (单号,父货号,货号,数量,单位)
    select  a.单号,a.货号,b.子货号,a.数量*b.用量*(1+b.损耗),b.单位 from inserted a  inner join bom b on a.货号=b.父货号那为何我的触发器也不删除记录呢?   触发器的条件应该不是我打错了吧.
      

  7.   

    触发器没有写错,inserted 里的数据那就不一定了
      

  8.   

    select * into ##test from inserted --delete 之前加上这句话
    delete from  mo_item  where 单号=@MONO and 父货号=@item   看看##test 标的内容是不是和mo_item  内容一致
      

  9.   

    特别谢谢各位的帮忙!  触发器的问题也解决了.之前的 零与欧 的确是一个错误.(那是我在测试时输入的两个条件) 不过也让我多明白了一个问题.但是触发器也有问题: 
    其中
    declare @MONO as varchar
    declare @item as varchar
    改成后,问题全部解决.
    declare @MONO as varchar(10)
    declare @item as varchar(10)但是这是为什么呢????
      

  10.   

    declare @a varchar 
    set @a='sdfsd'
    select @adeclare @a varchar (10) 
    set @a='sdfsd'
    select @a