关于使用更新存储过程,不想更新的数据被置成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了。这点不是我想要的,对此,各位达人,有什么好的办法吗? 展开
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了。这点不是我想要的,对此,各位达人,有什么好的办法吗? 展开
展开全部
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 就还是原来的数,不是就取传递的参数
具体请自行更改
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
看的明白吧
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
存储过程里面判断一下就好
更新语句部分可以拼接成字符串的SQL
然后执行exec 这个SQL就好啦
更新语句部分可以拼接成字符串的SQL
然后执行exec 这个SQL就好啦
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
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
存储过程名
@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
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询