我想要一个存储过程,它将根据是否提供参数来更新表行中的值。例如,我有一种情况想要更新所有值,但也有一种情况只需要更新两个值。我希望能够只用一个过程来完成此任务,而不是编写两个过程,这对我来说并不是特别有吸引力。我自己想出的最好的办法如下:
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
我意识到这些值无论如何都会每次更新,这并不理想。这是实现这一目标的有效方法,还是可以采取更好的方法?
最佳答案
我认为你的代码很好。我唯一要添加的是检查所有三个参数均为 NULL 的情况,在这种情况下不应进行更新。
关于sql - 在 UPDATE 语句中有条件地设置值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3832060/