2012-11-27 99 views
0

重寫我需要重寫以下Oracle 10g中查詢在SQL Server 2008中複雜UPDATE查詢,從Oracle 10g中

工作這是一個更新查詢,在一些領域中檢索從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 ...) 

請注意,我需要與甲骨文使用UPDATE SET ... WHERE EXIST ...結構兼容性(查詢由QueryBuilder的類自動生成每個特定DBMS)。

我也不能寫:

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 "Cannot update to NULL"因爲)它,如果SELECT不取任何記錄將返回一個錯誤。

在此先感謝!

回答

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 ...) 
+0

因此,沒有別的辦法嗎? – Teejay

+0

@Teejay:這是否適合你? –

+0

你的編輯符合我的需求更多...但我想知道'UPDATE SET FLD1 = VAL1,FLD2 = VAL2'與'UPDATE SET(FLD1,FLD2)=(VAL1,VAL2)'是一樣的。它應該,teoretically ... – Teejay