每个条目的SQL更新查询

时间:2012-11-11 03:20:47

标签: sql sql-server

如果在日志中发现某个用户标识违规,我不会更新列。

UPDATE 
USER_CHECK_LOGIN
SET 
CHECKLOGIN = 2
WHERE 
USER_CHECK_LOGIN.USER_ID = (SELECT NAME from XTREME.gamelogs.dbo.LOG_USING_DEPOT201211 WHERE GATENUM=150);

此查询的作用是,如果在gatenum为150的日志中找到用户标识,则将禁止所有用户。

但我似乎得到了一个错误。

Msg 512, Level 16, State 1, Line 2
Subquery returned more than 1 value. This is not permitted when the subquery follows =,     !=, <, <= , >, >= or when the subquery is used as an expression.
The statement has been terminated.

3 个答案:

答案 0 :(得分:2)

使用=代替IN(),因为子查询应返回多行。使用=与子查询返回值进行比较时,假定只返回一行,其中包含一列。

USER_CHECK_LOGIN.USER_ID IN (SELECT NAME from XTREME.gamelogs.dbo.LOG_USING_DEPOT201211 WHERE GATENUM=150);

答案 1 :(得分:2)

您可以完全使用join来避免子查询:

UPDATE UCL
SET 
CHECKLOGIN = 2
FROM
USER_CHECK_LOGIN UCL
JOIN
XTREME.gamelogs.dbo.LOG_USING_DEPOT201211 LUD
    ON LUD.NAME = UCL.USER_ID
WHERE 
LUD.GATENUM=150;

答案 2 :(得分:1)

USE IN

UPDATE 
USER_CHECK_LOGIN
SET 
CHECKLOGIN = 2
WHERE 
USER_CHECK_LOGIN.USER_ID IN (SELECT NAME from XTREME.gamelogs.dbo.LOG_USING_DEPOT201211 WHERE GATENUM=150);