SQL Server 表列的条件更新

Posted

技术标签:

【中文标题】SQL Server 表列的条件更新【英文标题】:Conditional update of SQL Server table column 【发布时间】:2016-09-04 22:39:09 【问题描述】:

我必须有条件地更新一个表(比如 SQL Server 中的表名是Venues,即如果Venues 中的一列(比如列名是Venue_Name)包含子字符串'C_',然后设置一列(在Venues = Conference 中说列名是Venue_Type)。

我试过这个查询:

IF Venue_Name CONTAINS 'C_'
    UPDATE Venues SET Venue_Type = 'Conference'
ELSE IF Venue_Name CONTAINS 'J_'
    UPDATE Venues SET Venue_Type = 'Journal'
ELSE
    UPDATE Venues SET Venue_Type = 'Other'  

但在使用关键字CONTAINS 时发现错误。

【问题讨论】:

【参考方案1】:

你需要的是一个CASE 表达式:

UPDATE Venues
    SET Venue_Type = CASE 
                        WHEN Venue_Name LIKE '%C[_]%' THEN 'Conference'
                        WHEN Venue_Name LIKE '%J[_]%' THEN 'Journal'
                        ELSE 'Other'
                     END

【讨论】:

我想你忘了使用 ESCAPE 字符,下划线将用作 LIKE 中任何字符的通配符。例如,它应该如下所示:Venue_Name LIKE '%C#_%' ESCAPE '#'

以上是关于SQL Server 表列的条件更新的主要内容,如果未能解决你的问题,请参考以下文章

是否可以隐式获取表列的最后更新时间戳?

如何从 SQL Server 读取 MS Access 数据库以更新一个或多个表列中的数据?

在sql server中用一个条件更新多个列

T-SQL 使用函数更新表列

使用另一个列值更新 sql db 表列

在 SQL Server 中将值分配给类似列后,使用 SSIS 将 Oracle 表列更新为 Null