关于ISNULL的问题

ron_xin 2012-03-15 08:26:50

ALTER Proc OrderRefund_Confirm
@OrderRefund_ID varchar(50),
@operate varchar(50)
as
--========================
--订单退货确认
--========================
--eg :exec OrderRefund_Confirm '20120221000002', 1


declare @OrdersC_ID varchar(50),@Return_Qty numeric(10,5),
@Product_Code varchar(50) ,@Product_Name varchar(50),@Descript varchar(50),
@Project varchar(50) , @Camera varchar(50) ,@Logo varchar(50) ,
@Color varchar(50) ,@Unit varchar(50),
@Amount NUMERIC(10,5), @ErrorMsg varchar(2000)


if @operate=1
begin
SELECT @OrdersC_ID=OrdersC_ID ,@Return_Qty=Return_Qty ,
@Product_Code=Product_Code , @Product_Name=Product_Name ,
@Descript=Descript , @Project=Project , @Camera=Camera , @Logo=Logo ,
@Color=Color , @Unit=Unit
FROM OrderRefund
WHERE OrderRefund_ID=@OrderRefund_ID


if not exists(select * from WasteProducts
where Product_Code=@Product_Code and Product_Name=@Product_Name
and Descript=@Descript and Project=@Project
and Camera=@Camera and Logo=@Logo
and Color=@Color and Unit=@Unit)
begin
insert into WasteProducts(Product_Code,Product_Name,Descript,Project,Camera,Logo,Color,Unit,Amount)
values(@Product_Code,@Product_Name,@Descript,@Project,@Camera,@Logo,@Color,@Unit,@Return_Qty)
end
else
BEGIN
--更新库存(预扣数量增加,库存数量增加)
UPDATE WasteProducts SET Amount=isnull(Amount,0)+@Return_Qty
WHERE Product_Code=@Product_Code and Product_Name=@Product_Name and Descript=@Descript
and Project=@Project and Camera=@Camera and Logo=@Logo
and Color=@Color and Unit=@Unit

--更新订单(退货数量增加)
UPDATE OrdersC SET Return_Qty=isnull(Return_Qty,0)+@Return_Qty WHERE OrdersC_ID=@OrdersC_ID
END
end

...全文
112 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
ron_xin 2012-03-15
  • 打赏
  • 举报
回复
找到原因了,解决方法
SET ANSI_NULLS OFF
ron_xin 2012-03-15
  • 打赏
  • 举报
回复
更正
if not exists是判断有没有找到相应条件的记录,如果没有就执行插入表的动作,如果有记录就执行更新表的动作。
ron_xin 2012-03-15
  • 打赏
  • 举报
回复
if not exists是判断有没有找到相应条件的记录,如果有就执行插入表的动作,如果有记录就执行更新表的动作。但问题出在exists里面的查询语句里。如在在查询语句里加上isnull判断,那么就能返回指定条件的记录了
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 ron_xin 的回复:]

SELECT * FROM OrderRefund WHERE OrderRefund_ID='20120221000002'
的Project ,Camera ,Logo 是null,赋值到@Project ,@Camera ,@Logo

但在判断if not exists(select * from WasteProducts
wh……
[/Quote]

不怎么明白,貌似跟exists有关,感觉你的子查询如果不加isnull()的话返回的是unknown,在进行exists判断是就是faulse,那么就不会有记录
ron_xin 2012-03-15
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 travylee 的回复:]
isnull什么问题??没写出来啊
[/Quote]
哥们,你的速度真快
ron_xin 2012-03-15
  • 打赏
  • 举报
回复
SELECT * FROM OrderRefund WHERE OrderRefund_ID='20120221000002'
的Project ,Camera ,Logo 是null,赋值到@Project ,@Camera ,@Logo

但在判断if not exists(select * from WasteProducts
where Product_Code=@Product_Code and Product_Name=@Product_Name
and Descript=@Descript and Project=@Project
and Camera=@Camera and Logo=@Logo
and Color=@Color and Unit=@Unit)
一直找不到记录,除非加上isnull(Project,'')....
  • 打赏
  • 举报
回复


isnull什么问题??没写出来啊

34,587

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧