基于列表的更新

时间:2015-10-13 20:00:43

标签: sql sql-update

我需要停用一堆用户。我有一个这样的列表(样本):

N0120454 N0219746 N0074342 N0203867 N0155928 N0025471 N0017467 N0239158 N0191759 N0007671

public int Id { get; set; }

有没有办法在不使用UserId UserId的情况下执行此操作?

3 个答案:

答案 0 :(得分:2)

可能正在使用in operator

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

如果您的vales在数据库表中,则有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 )

答案 1 :(得分:0)

你可以这样做:

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

答案 2 :(得分:0)

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

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

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