Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/81.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 仅当新值不为零时更新_Sql_Sql Server_Stored Procedures_Sql Update - Fatal编程技术网

Sql 仅当新值不为零时更新

Sql 仅当新值不为零时更新,sql,sql-server,stored-procedures,sql-update,Sql,Sql Server,Stored Procedures,Sql Update,我编写了一个存储过程,它根据传入参数的值更新字段 存储过程 现在,我们可能一次只需要更新一些字段是很常见的。假设我只想更新c。现在在这种情况下,参数b&d应该为空。因此,我用IsNull处理这个问题 但是,问题是@b是一个int,因此它作为0而不是Null传递。如何处理此更新 如果传递的值为0,则不应更新该列 注意:不会有任何情况下我的int列实际为0。可以通过更新中的case完成: CREATE PROCEDURE T1 ( @a INTEGER, @b

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

存储过程

现在,我们可能一次只需要更新一些字段是很常见的。假设我只想更新c。现在在这种情况下,参数b&d应该为空。因此,我用IsNull处理这个问题

但是,问题是@b是一个int,因此它作为0而不是Null传递。如何处理此更新

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


注意:不会有任何情况下我的int列实际为0。

可以通过更新中的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

该过程不接受空值。如何为参数传递空值?int的值可以为NULL。例如,try:DECLARE@i int;选择@i;设置@i=1;设置@i=NULL;选择@i;请注意,在这两个语句中都返回NULL。列,而不是字段。
    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