因为with必须紧跟引用的select语句,而不是delete,update,merge等。

所以有2种方式:

方式1.

update table1 b set b.NAME=(
  with t as
  (
    select * from temp
  )
  select a.NAME from table2 a where a.ID=b.ID
  )
where exists(select 1....)

方式2.

和merge into 一起使用

merge into table1 a
using(
  with t as
  (
    select * from ......
  )
  select a.NAME 
  from table2
  inner join t a on ......
) b on (a.id = b.id and ......)
when matched then 
update set 
a.NAME=b.NAME
--delete where a.nums=0

特别说明:
DELETE字句只能写在MATCHED情况中,不匹配时无法删除会报错。
当DELETE跟在UPDATE子句之后时,DELETE字句是针对UPDATE字句修改后的数据进行过滤的。
比如需要删除所有C字段="0"的数据,UPDATE字句将所有数据的C字段都更新为0,
那么会删除所有数据,而不是原本为0的数据。

 

posted on 2015-12-16 12:16  清风暮雨  阅读(10147)  评论(0)    收藏  举报