Ошибка в обновлении T-SQL в SQL Server 2005 - PullRequest
1 голос
/ 23 декабря 2010

Я хочу обновить некоторые данные в таблице EditEmail из базы данных DBUsers в таблицу EditEmail в базе данных dateCase DBCurrent. Так что я получил ошибку при выполнении следующего оператора:

USE DBCurrent

UPDATE [DBUsers].[dbo].[EditEmail] EN
SET EN.MailSubject = E.MailSubject,
    EN.MailMessage = E.MailMessage
FROM
(
    SELECT * FROM EditEmail
) AS E
WHERE EN.Type = E.Type

Сообщение об ошибке:

ERROR:
Msg 102, Level 15, State 1, Line 2
Incorrect syntax near 'EN'.
Msg 156, Level 15, State 1, Line 8
Incorrect syntax near the keyword 'AS'.

Есть ли какая-либо синтаксическая ошибка в этом T-SQL?

Ответы [ 2 ]

1 голос
/ 23 декабря 2010

Вы не можете дать таблице, которую вы указываете в операторе UPDATE, псевдоним таблицы (по любой причине - не спрашивайте меня, почему это невозможно, спросите команду разработчиков T-SQL) ...

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

USE DBCurrent

UPDATE 
    [DBUsers].[dbo].[EditEmail] 
SET 
    MailSubject = E.MailSubject,
    MailMessage = E.MailMessage
FROM
    dbo.EditEmail E
WHERE 
    DBUsers.dbo.EditEmail.Type = E.Type
    AND E.Type = 'blahblah'  -- or whatever additional conditions you have!

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

Также нет необходимости, чтобы ваш «искусственный» подзапрос ссылался на таблицу EditMail - просто определите это в предложении FROM и присвойте ему псевдоним таблицы (здесь они поддерживаются).

0 голосов
/ 23 декабря 2010

T-SQL не позволяет определять псевдоним обновленной таблицы, но он позволяет обновлять псевдоним:

Это исправляет синтаксис, я думаю, что логику еще нужно улучшить.Пожалуйста, попробуйте (я не проверял):

UPDATE EN
SET EN.MailSubject = E.MailSubject,
    EN.MailMessage = E.MailMessage
FROM [DBUsers].[dbo].[EditEmail] EN
    join EditEmail E
on EN.Type = E.Type
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...