基于列表更新

Updating Based on List

我需要停用一群用户。我有一个这样的列表(示例):

N0120454 N0219746 N0074342 N0203867 N0155928 N0025471 N0017467 N0239158 N0191759 N0007671

UPDATE dbo.Users 
set IsActive = 0, IsLocked = 1
where UserName = 'N0007671'

有没有一种方法可以在不通过 UserId 执行 UserId 的情况下执行此操作?

可能正在使用 in operator

UPDATE dbo.Users 
set IsActive = 0, IsLocked = 1
where UserName in( 'N0007671', 'N0219746', 'N0074342' ...)

如果您的值在数据库中 table,您有 2 种方法可以做到这一点

1 - 使用 IN

UPDATE dbo.Users 
SET IsActive = 0, IsLocked = 1
WHERE UserName IN ( SELECT username 
                    FROM your_table 
                    WHERE conditions )

2- 使用 EXISTS

 UPDATE dbo.Users 
 SET IsActive = 0, IsLocked = 1
 WHERE EXISTS ( SELECT NULL 
                FROM your_table yt 
                WHERE yt.username = dbo.Users and others_conditions )

你可以做到:

where UserName in ('N0007671', 'N0219746' ... )

如果您有硬编码列表,最简单的方法是:

UPDATE dbo.Users 
set IsActive = 0, IsLocked = 1
where UserName IN ('N0120454', 'N0219746', 'N0074342', 
                   'N0203867', 'N0155928', 'N0025471', 
                   'N0017467', 'N0239158', 'N0191759', 'N0007671')

如果您希望传入包含一堆的单个字符串值,那么循环遍历应用程序中的值会更简单。否则,您将需要使用动态 SQL,或编写一个将字符串解析为多个值并使用临时 table 加入的函数。既不标准也不漂亮。