Sql 仅当新值不为零时更新
我编写了一个存储过程,它根据传入参数的值更新字段 存储过程 现在,我们可能一次只需要更新一些字段是很常见的。假设我只想更新c。现在在这种情况下,参数b&d应该为空。因此,我用IsNull处理这个问题 但是,问题是@b是一个int,因此它作为0而不是Null传递。如何处理此更新 如果传递的值为0,则不应更新该列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
注意:不会有任何情况下我的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