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

时间:2010-09-30 15:21:09

标签: sql sql-server tsql

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

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

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

2 个答案:

答案 0 :(得分:4)

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

答案 1 :(得分:4)

SQL Server确实有一些逻辑来处理非更新更新。

More details than you probably wanted to know!

相关问题