这个UPDATE会完成我的意图吗?

时间:2012-05-11 21:39:28

标签: sql-server

对于那些SQL人来说,这可能是一个非常简单的问题。

我有一个临时表(TMP_VALIDATION_DATA),我在其中存储了我希望在生产表(PROVIDER_SERVICE)中更新的某些字段的旧值和新值,以及需要的PROVIDER_SERVICE记录的uuids更新。

我想要实现的是伪代码:

For every prov_svc_uuid uuid in TMP_VALIDATION_DATA table
  Set PROVIDER_SERVICE_RATE.END_DATE = NewPvSvcEndDate
  Where [uuid in temp table] = [uuid in PROVIDER_SERVICE table] 
end for

这个Update语句是否能完成我的需要?

update PROVIDER_SERVICE
set END_DATE = (
  select NewPvSvcEndDate 
  from TMP_VALIDATION_DATA T
  where T.PROVIDER_SERVICE_UUID = PROVIDER_SERVICE.PROVIDER_SERVICE_UUID 
)

如果我的更新不正确,请您提供更正吗?感谢。

2 个答案:

答案 0 :(得分:3)

您的查询将更新所有记录,如果子查询中有多个记录,则可能会出错。我还会将您的语法更改为JOIN,类似于以下内容。

update P
set END_DATE = T.NewPvSvcEndDate
FROM PROVIDER_SERVICE P
JOIN TMP_VALIDATION_DATA T
   ON P.PROVIDER_SERVICE_UUID = T.PROVIDER_SERVICE_UUID

如果您不想UPDATE所有记录,请添加WHERE条款。

我的建议是,如果您不知道UPDATE中会包含多少条记录,请首先将您的查询写为SELECT,然后将其更改为UPDATE。所以对于这个:

SELECT P.END_DATE, T.NewPvSvcEndDate
FROM PROVIDER_SERVICE P
JOIN TMP_VALIDATION_DATA T
   ON P.PROVIDER_SERVICE_UUID = T.PROVIDER_SERVICE_UUID

答案 1 :(得分:0)

这将更新所有记录,或者输出错误(不确定当您尝试使用多个值更新列时会发生什么)。