2015-10-13 66 views
0

我需要停用一堆用戶。我有這樣的(樣品)的列表:基於列表更新

N0120454 N0219746 N0074342 N0203867 N0155928 N0025471 N0017467 N0239158 N0191759 N0007671

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

是否有沒有做它執行此辦法UserId由UserId?

+0

用戶列表是否在系統之外停用,因此IN運算符是合理的,只要它不超過字符最大限制閾值。 – xQbert

回答

0

如果你有一個硬編碼列表的最簡單的方法是做:

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

如果您希望在包含一串一個字符串值傳遞然後循環遍歷應用中的值更簡單。否則,您將需要使用動態SQL,或者編寫一個將字符串解析爲多個值並使用臨時表來加入的函數。既不標準也不漂亮。

2

可能使用in operator

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

如果您瓦萊斯是在數據庫表中,你有兩種方法可以做到這

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) 
+0

謝謝!!!這樣可行。 –

0

你可以這樣做:

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