【发布时间】:2012-11-27 11:44:41
【问题描述】:
我需要重写以下 Oracle 10g 查询以在 SQL Server 2008
中工作这是一个更新查询,其中一些字段是从 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 ... 结构来与 Oracle 兼容(查询由每个特定 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 "Cannot update to NULL")如果 SELECT 没有获取任何记录,它会返回错误。
提前致谢!
【问题讨论】: