我想将EditEmail表中的一些数据从DBUsers数据库更新到DBCurrent datebase中的EditEmail表。所以当我执行以下语句时出错:
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中是否存在语法错误?
答案 0 :(得分:1)
您无法在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
子句中定义它并给它一个表别名(这里,它们是支持的)
答案 1 :(得分:0)
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