关于使用更新存储过程,不想更新的数据被置成NULL的困惑?

,据库中有一个表A,有4个关于表A的存储过程,Insert,Update,Delete和Select。关于Update和Insert存储过程的代码一般为:ALTERPRO... ,据库中有一个表A,有4个关于表A的存储过程,Insert,Update,Delete和Select 。关于Update和Insert 存储过程的代码一般为:
ALTER PROCEDURE [dbo].[A_Update]
(
@ServerID INT ,
@ServerName NVARCHAR(50) ,
@ServerUrl NVARCHAR(50) ,
@ServerLogo NVARCHAR(255) ,
@OrderID INT ,
@ShowType INT

)
AS
UPDATE PE_DownServer
SET ServerName = @ServerName ,
ServerUrl = @ServerUrl ,
ServerLogo = @ServerLogo ,
OrderID = @OrderID ,
ShowType = @ShowType
WHERE ServerID = @ServerID
RETURN
-------------------------------------------------------------------
关于这个表A,有个方法,Update ,传入表字段的参数,执行Update的存储过程,即可。
那么问题是:在更新的时候,有时,只是更新部分数据,有另外部分数据不做更新,所以,在执行更新方法的时候,我们只是想把需要更新的数据添加到参数列表里,然后执行Update方法,但是,执行该方法后,那些不更新的数据,因为没有传入到参数列表中,在执行更新语句后,被改为NULL了,这点是我们不希望看到的。碰到这样的问题,如何处理呀?
简单起见,问题如下:
------------------------------------------------------------------------------------------
更新方法UpdateMyTableA(ModelMyTableA mymodel);
值数据库中,有存储过程,如上描述。
目前,我想更新MyTableA这张表的部分数据,不是全部。在调用UpdateMyTableA方法是,我将要更新的数据插入mymodel中,到那么在执行完该方法后 ,需要更新的数据达到目的,但是那些我不想更新的数据却被更新为NULL了。这点不是我想要的,对此,各位达人,有什么好的办法吗?
展开
 我来答
百度网友ecc263c
2011-08-26 · TA获得超过624个赞
知道小有建树答主
回答量:478
采纳率:100%
帮助的人:380万
展开全部
case when @ServerName is null then ServerName else @ServerName end
case when @ServerUrl is null then ServerUrl else @ServerUrl end
case when @ServerLogo is null then ServerLogo else @ServerLogo end
case when @OrderID is null then OrderID else @OrderID end
case when @ShowType is null then ShowType else @ShowType end

类似这样
做一个判断
如果是null 就还是原来的数,不是就取传递的参数
具体请自行更改
追问
这段SQL 语句加在哪???
追答
UPDATE  PE_DownServer
SET ServerName = case when @ServerName is null then ServerName else @ServerName end,
ServerUrl = case when @ServerUrl is null then ServerUrl else @ServerUrl end,
ServerLogo = case when @ServerLogo is null then ServerLogo else @ServerLogo end,
OrderID = case when @OrderID is null then OrderID else @OrderID end,
ShowType = case when @ShowType is null then ShowType else @ShowType endWHERE ServerID = @ServerID
RETURN
看的明白吧
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
JG_陈
2011-08-26 · TA获得超过206个赞
知道小有建树答主
回答量:651
采纳率:100%
帮助的人:361万
展开全部
存储过程里面判断一下就好
更新语句部分可以拼接成字符串的SQL
然后执行exec 这个SQL就好啦
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
246pxek718
2011-08-27 · TA获得超过493个赞
知道小有建树答主
回答量:558
采纳率:0%
帮助的人:97.3万
展开全部
CREATE PROCEDURE
存储过程名
@num int,
@name varchar(50),
@price int,
@ptime datetime
as
Update 表
set
name= @name,
num=@num,
类推.....
where name=@name
EXECUTE @num=xxx,
@name =xxx,
@price=xxx,
@ptime =xxx
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式