仅在新值不为零

时间:2018-03-29 10:24:48

标签: sql sql-server stored-procedures sql-update

我编写了一个存储过程,它根据参数中传递的值更新字段。

存储过程

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()

但是,问题是@bint,因此它传递为0而不是Null。如何处理此更新。

如果传递的值为0,则不应更新该列。

注意:我的int列实际上不会0

1 个答案:

答案 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