如果在日志中发现某个用户标识违规,我不会更新列。
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.
答案 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);