在UPDATE语句中有条件地设置值

Ker*_*own 5 sql t-sql sql-server

我想有一个存储过程,它将更新表行中的值,具体取决于是否提供了参数.例如,我有一种情况,我想更新所有值,但也有一种情况,我只需要更新两个值.我希望能够只用一个程序来做这个,而不是写两个,这对我来说并不特别有吸引力.我设法提出的最好的是以下内容:

CREATE PROCEDURE dbo.UpdatePerson
@PersonId INT,
@Firstname VARCHAR(50) = NULL,
@Lastname VARCHAR(50) = NULL,
@Email VARCHAR(50) = NULL
AS
BEGIN
    SET NOCOUNT ON

UPDATE Person 
Set 
    Firstname = COALESCE(@Firstname, Firstname),
    Lastname = COALESCE(@LastName, Lastname),
    Email = COALESCE(@Email, Email)
    WHERE PersonId = @PersonId

END
Run Code Online (Sandbox Code Playgroud)

我意识到每次都会更新这些值,这并不理想.这是实现这一目标的有效方法,还是可以采用更好的方式?

Red*_*ter 4

我认为你的代码很好。我唯一要添加的是检查所有三个参数均为 时的情况NULL,在这种情况下不应进行更新。