执行delete(所影响的行数为 0 行),说明 where 单号='MO_0001' and 父货号='201'的条件压根没满足,select应该也一样不知道单号和父货号都是什么数据类型?
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.父货号
你应该这么测一下 select * from mo_item where 单号='MO_0001' select * from mo_item where 父货号='201' 来确定是那个字段出毛病 有时候M是全角时就会出错
--测试环境 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 行)**/
我找到你的原因了,你仔细看看你条件中的'MO_0001' 中是'M0'还是'MO'
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.父货号那为何我的触发器也不删除记录呢? 触发器的条件应该不是我打错了吧.
触发器没有写错,inserted 里的数据那就不一定了
select * into ##test from inserted --delete 之前加上这句话 delete from mo_item where 单号=@MONO and 父货号=@item 看看##test 标的内容是不是和mo_item 内容一致
特别谢谢各位的帮忙! 触发器的问题也解决了.之前的 零与欧 的确是一个错误.(那是我在测试时输入的两个条件) 不过也让我多明白了一个问题.但是触发器也有问题: 其中 declare @MONO as varchar declare @item as varchar 改成后,问题全部解决. declare @MONO as varchar(10) declare @item as varchar(10)但是这是为什么呢????
declare @a varchar set @a='sdfsd' select @adeclare @a varchar (10) set @a='sdfsd' select @a
where 单号='MO_0001' and 父货号='201'的条件压根没满足,select应该也一样不知道单号和父货号都是什么数据类型?
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.父货号
select * from mo_item where 单号='MO_0001'
select * from mo_item where 父货号='201'
来确定是那个字段出毛病
有时候M是全角时就会出错
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 行)**/
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.父货号那为何我的触发器也不删除记录呢? 触发器的条件应该不是我打错了吧.
delete from mo_item where 单号=@MONO and 父货号=@item 看看##test 标的内容是不是和mo_item 内容一致
其中
declare @MONO as varchar
declare @item as varchar
改成后,问题全部解决.
declare @MONO as varchar(10)
declare @item as varchar(10)但是这是为什么呢????
set @a='sdfsd'
select @adeclare @a varchar (10)
set @a='sdfsd'
select @a