2014-02-21 4 views
0

Я раньше не использовал UPDATE, и я пытаюсь обновить таблицу на основе запроса нескольких таблиц. То, что я пытаюсь сделать, это изменить servicetype.servicetype_id от 1 до 74571 на сервисах, возвращаемых в моем запросе. Когда я выполняю запрос ниже, я получаю сообщение об ошибке «Идентификатор-multipart» service_1.service_id «не может быть привязан», и все экземпляры таблицы службы в моем запросе меняются на service_1.Таблица UPDATE по запросу

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

Будьте осторожны с этим! Вы должны обязательно подтвердить результаты SELECT, прежде чем менять его на UPDATE.

Здесь приведены ответы на аналогичный вопрос ... How do I UPDATE from a SELECT in SQL Server?

+0

Я получаю сообщение об ошибке с этим. В нем говорится: «Идентификатор-multipart« service_1.service_id »не может быть привязан. Он меняет службу на service_1 в течение всего запроса при его выполнении. – Stedman

+0

@Stedman Можете ли вы обновить свой вопрос с помощью запроса« UPDATE »? Возможно, вы просто имеете псевдоним по ошибке или где-то отсутствует. Попробуйте 'UPDATE service_1 ...', если таблица была псевдонимом ('service AS service_1'). – Manny