我编写了一个存储过程,它根据参数中传递的值更新字段。
存储过程
CREATE PROCEDURE T1
(
@a INTEGER,
@b INTEGER,
@c nvarchar(max),
@d nvarchar(max)
)
AS
BEGIN
UPDATE Feed
Set b=@b,
c=ISNULL(@c,c),
d=ISNULL(@d,d),
where a = @a
end
现在我们可能需要一次只更新一些字段。假设我只想更新c
。现在在这种情况下,参数b
& d
应为Null
。因此,我正在处理IsNull()
。
但是,问题是@b
是int
,因此它传递为0
而不是Null
。如何处理此更新。
如果传递的值为0
,则不应更新该列。
注意:我的int
列实际上不会0
。
答案 0 :(得分:1)
可以通过UPDATE中的CASE来完成:
CREATE PROCEDURE T1
(
@a INTEGER,
@b INTEGER,
@c nvarchar(max),
@d nvarchar(max)
)
AS
BEGIN
UPDATE Feed
Set b=case when @b = 0 then b else @b end,
c=ISNULL(@c,c),
d=ISNULL(@d,d),
where a = @a
end