0

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

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

我想要完成的是,在伪代码中:

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 PROVIDER_SERVICE
set END_DATE = (
  select NewPvSvcEndDate 
  from TMP_VALIDATION_DATA T
  where T.PROVIDER_SERVICE_UUID = PROVIDER_SERVICE.PROVIDER_SERVICE_UUID 
)

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

4

2 回答 2

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
于 2012-05-11T21:45:09.287 回答
0

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

于 2012-05-11T21:42:21.857 回答