日期:2014-05-18  浏览次数:20519 次

如何让update不更新值为null的字段。
我想用一个update语句把所有的字段都列出来
比如:update set A,B,C,D 四个字段 
当我想更新A字段时,就传入A参数,B,C,D的值都为null
想要的效果是 A新、B,C,D
而不是 A新、null,null,null


------解决方案--------------------
参照下
set ANSI_NULLS ON
set QUOTED_IDENTIFIER ON
go


------------------------------------------------------
-- 生成日期: 2007-8-23 14:10:51
-- 创 建 者: Xuu27
-- 修 改 者:
-- 作 用:更改Basket中的一条记录(根据列的Null值)
-- 业务说明:
------------------------------------------------------
UPDATE PROCEDURE [dbo].[up_Basket_UPDATE_One_NullCheck]
(
@BasketID INT =NULL,--购物车ID
@MemberID INT =NULL,--会员ID
@DcSendGoodsTypeID INT =NULL,--送货方式
@PayOrderType INT =NULL,--支付订单方式
@Description VARCHAR(200) =NULL,--描述
@ReceiverName VARCHAR(50) =NULL,--收件人
@Telephone VARCHAR(50) =NULL,--电话
@Mobile VARCHAR(50) =NULL,--手机
@RegionID VARCHAR(50) =NULL,--地区ID
@RegionName VARCHAR(50) =NULL,--地区
@PostCode VARCHAR(50) =NULL,--邮编
@Address VARCHAR(200) =NULL,--地址
@UsedDcCashCardID INT =NULL--使用的现金劵
)
AS

UPDATE [dbo].[Basket] 
SET
--[BasketID] = ISNULL(@BasketID,[BasketID]),
[MemberID] = ISNULL(@MemberID,[MemberID]),
[DcSendGoodsTypeID] = ISNULL(@DcSendGoodsTypeID,[DcSendGoodsTypeID]),
[PayOrderType] = ISNULL(@PayOrderType,[PayOrderType]),
[Description] = ISNULL(@Description,[Description]),
[ReceiverName] = ISNULL(@ReceiverName,[ReceiverName]),
[Telephone] = ISNULL(@Telephone,[Telephone]),
[Mobile] = ISNULL(@Mobile,[Mobile]),
[RegionID] = ISNULL(@RegionID,[RegionID]),
[RegionName] = ISNULL(@RegionName,[RegionName]),
[PostCode] = ISNULL(@PostCode,[PostCode]),
[Address] = ISNULL(@Address,[Address]),
[UsedDcCashCardID] = ISNULL(@UsedDcCashCardID,[UsedDcCashCardID])
WHERE
[BasketID] = @BasketID


用了ISNULL,意思是,如果传入是null就用自己原来自己的值更新,实际上是保留原值