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

标签 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

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

最佳答案

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

关于sql - 在 UPDATE 语句中有条件地设置值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3832060/

相关文章:

SQL使用第二个表中的最小值连接两个表

sql - 删除时如何在存储过程中使用2个表?

sql-server - SQL Server 中存储 IP 地址的数据类型

sql-server-2008 - tsql - 使用 SUBSTRING 提取字符串

sql - 在 SQL Server 中结合使用条件运算符和 INTERSECT

MySql order by (varchar) date in Mmm-dd-yyyy

java - jsp中过滤记录的sql查询

sql - XACT_ABORT 不回滚 SQL Server 2012 上的事务

SQL 更新 - 多列

sql - T-SQL : Selecting Column Based on MAX(Other Column)