比较一个" temp'表中包含CTE中的值,然后更新两个不同的表

时间:2016-02-29 15:07:27

标签: sql-server

我有一个" temp'从java中可传输的注册填充的表。我正在做的是比较" temp"带有值的表我在带有选择查询的CTE中填充。我接下来需要做的是更新两个不同的表。这是我对" temp"的比较的查询表和CTE:

WITH CTE AS
(
     SELECT S.SYS_USER_NAME, PG.PAX_ID 
     FROM component.SYS_USER S
     INNER JOIN component.PAX_GROUP PG
     ON S.PAX_ID = PG.PAX_ID
     WHERE (ROLE_CODE = 'AC' and THRU_DATE is null) or
     (ROLE_CODE = 'DLRP' and THRU_DATE is null)
)
SELECT * FROM CTE
INNER JOIN component.TEMP_CONTROL_NUM
ON TEMP_CONTROL_NUM.CONTROL_NUM = CTE.SYS_USER_NAME

接下来我要做的是更新两个不同的表。我需要将状态列设置为非活动状态,而另一个我需要设置直通日期。

我遇到的问题是使用SELECT编写UPDATE。我有类似的东西:

UPDATE component.SYS_USER SET STATUS = 'I'
    WHERE SYS_USER_NAME =
    (SELECT * FROM CTE INNER JOIN component.TEMP_CONTROL_NUM ON
    TEMP_CONTROL_NUM = CTE.SYS_USER_NAME)

这是正确的吗?我意识到我只是试图更新一个表,但我想如果我有一个表更新,我可以找出另一个。它似乎不是。 提前谢谢。

1 个答案:

答案 0 :(得分:1)

;WITH CTE as
(
  ...
)
UPDATE u SET
  STATUS = 'I'
FROM component.SYS_USER u
INNER JOIN CTE c on c.SYS_USER_NAME = u.SYS_USER_NAME
INNER JOIN component.TEMP_CONTROL_NUM t ON t.TEMP_CONTROL_NUM = c.SYS_USER_NAME