0

SQL Server 2008で機能するには、次のOracle10gクエリを書き直す必要があります。

これは更新クエリであり、一部のフィールドはから取得され、SELECT一部は(コードから)指定されます。

UPDATE "BMAN_SQL"."CELLS_GLIST" 
   SET ("GLIST_ID", "GLIST_VALUE_ID") = (

                                         SELECT "GLIST_ID", "GLIST_VAL_ID"
                                         FROM "BMAN_SQL"."GLISTS_VAL_UOR"
                                         WHERE ("UOR_ID"=3)
                                         AND ("GLIST_CODE"='X')

                                        ), 
       "SESSION_ID" = 1553245736,
       "USER_ID" = 13

WHERE EXISTS ( SELECT * FROM ... )

Oracleとの互換性のために構造を使用する必要があることに注意してくださいUPDATE SET ... WHERE EXIST ...(クエリは特定のDBMSごとにQueryBuilderクラスによって自動的に構築されます)。

私も書くことができません:

UPDATE "BMAN_SQL"."CELLS_GLIST" 
   SET ("GLIST_ID", "GLIST_VALUE_ID", "SESSION_ID", "USER_ID") = (

                        SELECT "GLIST_ID", "GLIST_VAL_ID", 1553245736, 13
                        FROM "BMAN_SQL"."GLISTS_VAL_UOR"
                        WHERE ("UOR_ID"=3)
                        AND ("GLIST_CODE"='X')

       )

WHERE EXISTS ( SELECT * FROM ... )

なぜなら(この古いスレッドのように、Oracleは「NULLに更新できません」SELECT )、がレコードをフェッチしない場合、エラーを返します。

前もって感謝します!

4

1 に答える 1

0

この場合、更新クエリに参加する必要があります。以下の構文を参照してください。<Your condition here>このセクションを結合条件に置き換えます。

UPDATE m 
SET 
    GLIST_ID = r.GLIST_ID
    ,GLIST_VALUE_ID = r.GLIST_VAL_ID
    , SESSION_ID= 1553245736
    , USER_ID = 13
from BMAN_SQL.CELLS_GLIST m
inner join BMAN_SQL.GLISTS_VAL_UOR r on <Your condition here>
WHERE 
r.UOR_ID=3 AND (r.GLIST_CODE='X') AND
EXISTS ( SELECT * FROM ... )

編集

UPDATE BMAN_SQL.CELLS_GLIST 
SET 
GLIST_ID = (SELECT TOP 1 GLIST_ID FROM BMAN_SQL.GLISTS_VAL_UOR WHERE (UOR_ID=3) AND (GLIST_CODE='X'))
,GLIST_VALUE_ID = (SELECT TOP 1 GLIST_VAL_ID FROM BMAN_SQL.GLISTS_VAL_UOR WHERE (UOR_ID=3) AND (GLIST_CODE='X'))
,SESSION_ID = 1553245736
,USER_ID = 13
WHERE EXISTS ( SELECT * FROM ... )
于 2012-11-27T13:04:05.933 に答える