1

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

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);

这个查询的作用是,如果在日志中找到一个用户 ID,其门数为 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.
4

3 回答 3

2

代替=, 使用,IN()因为子查询应该返回多行。与子查询返回值=进行比较假设只返回一行一列。

USER_CHECK_LOGIN.USER_ID IN (SELECT NAME from XTREME.gamelogs.dbo.LOG_USING_DEPOT201211 WHERE GATENUM=150);
于 2012-11-11T03:22:19.063 回答
2

您可以使用连接完全避免子查询:

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;
于 2012-11-11T04:05:25.243 回答
1

利用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);
于 2012-11-11T03:22:48.220 回答