使用过滤器更新存储过程

Geo*_*VIP 3 sql sql-server stored-procedures

我创建表

CREATE TABLE tbl
(
ID int,
FirstName nvarchar(50),
LastName nvarchar(50)
)
Run Code Online (Sandbox Code Playgroud)

有存储过程在哪里

UPDATE tbl
SET FistName = @firstName  , LastName = @lastName
WHERE ID = @ID
Run Code Online (Sandbox Code Playgroud)

现在,当我调用我的存储过程时, exec myProc 1,'John',''只想更新我写的那些列.例如,如果我有我的表值:

ID : 1
FirstName: Bob
LastName : Brown
Run Code Online (Sandbox Code Playgroud)

执行后必须是

ID : 1
FirstName: John
LastName : Brown
Run Code Online (Sandbox Code Playgroud)

Joe*_*ras 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
Run Code Online (Sandbox Code Playgroud)

一般是正确管理NULL和空字符串值