sql-server - T-SQL : Update column only if value is provided

标签 sql-server tsql

目前我有这个 UPDATE 语句:

UPDATE Customer 
SET Name = @Name,
    Age = @Age,
    Email = @Email
    ...

现在,只有在提供值的情况下,我才需要将列包含到 UPDATE 语句中。否则,不要在 UPDATE 语句中包含该列。

所以在概念上可能是这样的:

UPDATE Customer 
SET
    IF LEN(@Name) > 0 THEN Name = @Name,
    IF LEN(@Age) > 0 THEN Age = @Age,
    IF LEN(@Email ) > 0 THEN Email = @Email
    ...

有什么办法可以做到这一点吗?我正在考虑动态查询,但更新列的列表超长,因此需要做大量工作才能更改为这样的动态查询:

SET @SQL = 'UPDATE Customer SET '

IF LEN(@Name) > 0
    SET @SQL = @SQL + 'Name = @Name,'

IF LEN(@Age) > 0
    SET @SQL = @SQL + 'Age= @Age,'

最佳答案

我认为你应该试试这个 (在声明和设置变量@Name、@Age 和@Email 之后)

    UPDATE Customer SET
    Name = case when @Name  is null then Name  else @Name  end,
    Age  = case when @Age   is null then Age   else @Age   end,
    Email= case when @Email is null then Email else @Email end,
    ...

如果任何变量的值为空,则不会更新该字段。

关于sql-server - T-SQL : Update column only if value is provided,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53772278/

相关文章:

sql - 按日期将文件从一个目录复制到另一个目录

javascript - 使用 jquery 在 asp.net 中自动完成

sql - 如果行的 ID 在定义的范围内,则对行值求和

sql-server - 使用 DROP 和 CREATE 一次性编写所有存储过程的脚本

sql-server - 区分大小写变得疯狂

sql-server - SQL Server 架构和默认架构

php - 动态学说数据库连接

sql-server - TSQL : How do I get the size of the transaction log?

c# - 在 ASP.NET 中使用超链接编辑 gridview 中的行

sql - 在 SQL Server 中生成排列的最优雅方式