【问题标题】:SQL Update if parameter is not null or empty如果参数不为空或为空,则 SQL 更新
【发布时间】:2014-08-14 23:40:15
【问题描述】:

我搜索了一些方法来检查 SQL Server 参数是否为空或为空,但我不确定在更新多个列时使用此参数的最佳方法是什么:

我一开始有这段代码在更新时没有检查空值或 Null 值:

UPDATE [Users] 
SET FirstName = @firstname, City = @city, Address = @address, ....
WHERE ID = @iduser

然后我在更新之前添加了一个IF 子句,它是这样工作的,但我不确定这是否是最好的方法,如果我必须更新几列,那将会很长。

--Check if parameter is not null or empty before updating the column
IF (@firstname IS NOT NULL AND @firstname != '')
   UPDATE [Users] 
   SET FirstName = @firstname 
   WHERE ID = @iduser

IF (@city IS NOT NULL AND @city != '')
   UPDATE [Users] 
   SET City = @city 
   WHERE ID = @iduser
   ...
   ...

如果值为 Null 或 Empty 我不需要更新,只需将原始值保留在数据库中即可。

【问题讨论】:

    标签: sql sql-server tsql


    【解决方案1】:

    如果它是空白的,不确定你想要实现什么,但我会尝试使用IsNull() 我不认为有IsBlank(),但你自己写应该不会太难

    仅使用 IsNull 您的查询看起来像...

    Update [Users]
    set    FirstName = IsNull(@FirstName, FirstName),
           City = IsNull(@City, City)
           ....
    Where  ...
    

    如果参数值不为空,这将使用参数值更新行,否则将其更新为自身,也就是什么都不改变。

    【讨论】:

    • 感谢您的快速回复,您引导我找到正确答案。我最终使用: ISNULL(NULLIF(@City, ''), City): stackoverflow.com/questions/334108/… 我不确定是否应该关闭它
    • @Alex NULLIF 用于 VARCHAR 列,而不用于其他 数据类型
    • 我们还可以使用 Coalesce() 吗?
    • 我正在使用 COALESCE 和 postgresql 并且它有效!只需这样做:UPDATE table SET column =COALESCE(newValue, column) WHERE condition = true
    • 这是怎么回事? COALESCE 和 ISNULL not 处理空字符串,如 null:i.imgur.com/6nNMy7G.png
    猜你喜欢
    • 2012-10-29
    • 2020-08-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多