使用过滤器更新存储过程

3

我创建表格

CREATE TABLE tbl
(
ID int,
FirstName nvarchar(50),
LastName nvarchar(50)
)

我有一个存储过程,其中

UPDATE tbl
SET FistName = @firstName  , LastName = @lastName
WHERE ID = @ID

现在当我调用存储过程 exec myProc 1,'John','',只想更新指定的列。例如,如果我的表中有以下值:
ID : 1
FirstName: Bob
LastName : Brown

执行完后必须是这样的

ID : 1
FirstName: John
LastName : Brown
1个回答

8

试试这个:

UPDATE tbl
SET FirstName = 
case 
    when @firstName is null or @firstName = '' then firstName 
    else @firstName
end,
LastName = 
case 
    when @lastName is null or @lastName = '' then lastName 
    else @lastName
end
WHERE ID = @ID

通常正确处理NULL和空字符串值


谢谢您的帮助,但如果我想更新多个值,有没有不用case语句的方法? - GeoVIP
case语句处理输入数值,而不是行数。行数由where条件中的@id管理;) - Joe Taras

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接