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

このクエリは、gatenumが150のログでユーザーIDが見つかった場合、すべてのユーザーが禁止されます。

しかし、エラーが発生するようです。

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()サブクエリの戻り値と比較して使用=すると、1つの列を持つ1つの行のみが返されると想定されます。

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 に答える