2014-09-11 4 views
0

Вот мой код в SQL сервереобновление в SQL сервере с присоединяемой таблицы

У меня есть сообщение об ошибке сказав «Мульти-часть идентификатора„t2.isactive“не могут быть связаны.»

также, что я хочу сделать это обновление в одной команде и одной команды только

спасибо за помощь

UPDATE tb_active_priority_alert 
SET 
priority_alert_guid = t2.priority_alert_guid, 
priority_alert_title = t2.priority_alert_title, 
priority_alert_zone = t2.priority_alert_zone, 
priority_alert_color =t2.priority_alert_color, 
priority_alert_allow_cancel = t2.priority_alert_allow_cancel, 
priority_alert_time_duration = t2.priority_alert_time_duration, 
priority_alert_type = t2.priority_alert_type, 
priority_alert_text = t2.priority_alert_text, 
web_url =t2.web_url, 
video_url = t2.video_url, 
video_style = t2.video_style, 
banner_playlist_guid = t2.banner_playlist_guid, 
signage = t2.signage, 
signage_guid = t2.signage_guid, 
alert_icon = t2.alert_icon, 
isactive ='true', 
user_guid =t2.user_guid, 
creation_datetime = GETDATE(), 
expiration_datetime = dateadd(MINUTE,t2.priority_alert_time_duration,GETDATE()), 
t2.isactive='true' 
from tb_users_priority_alerts t2 left outer join tb_active_priority_alert t1 on t2.priority_alert_guid [email protected]_alert_guid 
WHERE t2.priority_alert_guid [email protected]_alert_guid; 
+0

Используйте правильное условие JOIN 't2.priority_alert_guid = t1.thejoiningcolumn' – Mihai

+0

Трудно сказать, что происходит, не видя определения таблиц. Можете ли вы разместить свои определения таблиц для t1 и t2? Идентификатор с несколькими частями не может быть связан с ошибкой, в основном говоря, что SQL не может найти столбец неактивным в tb_active_priority_alert t1. Это упрощено, но это основная идея. –

ответ

1

вы не можете заставить его работать.
заявление:

t2.isactive='true' 

пытается обновить таблицу, которая не один указано в первой строке вашего заявления.
инструкция обновления может обновлять данные в одной таблице/объекте; то, что вы пытаетесь сделать, это обновить данные в двух разных таблицах сразу, и это не поддерживается.
here вы можете найти тот же самый вопрос, на который ответил SO.
here вы можете найти официальную документацию по MS о UPDATE; он явно не написан, но в каждой ссылке на элемент, который нужно обновить, вы найдете один объект в качестве цели, и даже в руководстве по синтаксису ожидается только одна цель.

Вы можете перейти с двумя отдельными операциями обновления в транзакции.

+0

Извините, вы правы .... спасибо – nesreen

0

У Вас есть ошибка в вашем присоединиться t1. Вы должны присоединиться к двум таблицам по определенному id/value/whatever.

попробуйте вместо этого:

from tb_users_priority_alerts t2 
left join tb_active_priority_alert t1 on t2.priority_alert_guid = t1.priority_alert_guid 

вместо t2.priority_alert_guid = @ priority_alert_guid

+0

Я не могу это сделать, потому что t1 будет постоянно иметь только один столбец , который не находится в t2 , поэтому я хочу обновить t1 без каких-либо условий. – nesreen

+0

Итак, почему вы присоединитесь к t1 в select-statement? – ssn

0

В вашем запросе вы показали IsActive = 'истинный' он выдает ошибку, даже я думаю IsActive колонка в обеих таблицах и здесь вы не упоминаете tb_active_priority_alert.isactive, поэтому он дает ошибку.

И еще раз упомянем ниже t2.isactive = 'true', поэтому здесь нет необходимости в isactive = 'true'.

Смежные вопросы