我希望有一个存储过程,它将根据是否提供参数来更新表行中的值。例如,我有一种情况,我想更新所有值,但也有一种情况,我只需要更新两个值。我希望能够只用一个程序来做这个,而不是写两个,这对我来说并不特别有吸引力。我设法提出的最好的就是以下内容:
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
我意识到每次都会更新这些值,这并不理想。这是实现这一目标的有效方式,还是可以采用更好的方式?
答案 0 :(得分:4)
我认为您的代码很好。我唯一要补充的是检查所有三个参数都是NULL
时的情况,在这种情况下不应该进行更新。
答案 1 :(得分:4)
SQL Server确实有一些逻辑来处理非更新更新。