UPDATE表基于查询

时间:2014-02-21 14:32:09

标签: sql sql-server-2008 sql-update

之前我没有使用过UPDATE,我正在尝试根据多个表的查询来更新表。我想要做的是在我的查询中返回的服务上将servicetype.servicetype_id从1更改为74571。当我执行下面的查询时,我收到错误“The-multipart identifier”service_1.service_id“无法绑定”,并且我的查询中服务表的所有实例都更改为service_1。

UPDATE service
SET service.service_id = 74571
FROM accountservice INNER JOIN
     serviceclass ON accountservice.serviceclass_id = serviceclass.serviceclass_id INNER JOIN
     service ON accountservice.service_id = service.service_id INNER JOIN
     servicetype ON service.servicetype_id = servicetype.servicetype_id
WHERE        (servicetype.servicetype_id = 1) AND (serviceclass.serviceclass_id = 74561) AND (accountservice.fromdate <= '2013-11-15') AND (accountservice.todate IS NULL)

2 个答案:

答案 0 :(得分:1)

您可以在连接中指定要更新的表:

UPDATE service
SET service.service_id = 74571
FROM accountservice INNER JOIN
         serviceclass ON accountservice.serviceclass_id = serviceclass.serviceclass_id INNER JOIN
         service ON accountservice.service_id = service.service_id INNER JOIN
         servicetype ON service.servicetype_id = servicetype.servicetype_id
WHERE ...

小心这个!在将其更改为SELECT之前,您应该确认UPDATE的结果。

以下是类似问题的答案...... How do I UPDATE from a SELECT in SQL Server?

答案 1 :(得分:0)

未经测试,但这应该可以解决问题。

UPDATE s SET s.service_id = 74571 FROM
FROM            accountservice INNER JOIN
                     serviceclass ON accountservice.serviceclass_id = serviceclass.serviceclass_id INNER JOIN
                     service s ON accountservice.service_id = service.service_id INNER JOIN
                     servicetype ON service.servicetype_id = servicetype.servicetype_id
WHERE        (servicetype.servicetype_id = 1) AND (serviceclass.serviceclass_id = 74561) AND (accountservice.fromdate <= '2013-11-15') AND (accountservice.todate IS NULL)