2014-02-21 47 views
0

我之前没有使用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) 

回答

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) 
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 ... 

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

这里是对类似问题的解答... How do I UPDATE from a SELECT in SQL Server?

+0

我收到一条错误消息。它说:“多部分标识符”service_1.service_id“无法绑定,它在执行时将整个查询中的服务更改为service_1。 – Stedman

+0

@Stedman您是否可以使用UPDATE查询更新您的问题?您可能只需要如果表已被别名('service AS service_1'),则尝试'UPDATE service_1 ... ...'。 – Manny