Sql server 2005 SQL Server 2005中更新T-SQL时出错

Sql server 2005 SQL Server 2005中更新T-SQL时出错,sql-server-2005,Sql Server 2005,我想将EditEmail表中的一些数据从DBUsers数据库更新到DBCurrent数据库中的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.T

我想将EditEmail表中的一些数据从DBUsers数据库更新到DBCurrent数据库中的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
错误消息:


此T-SQL中是否存在语法错误?

您不能为在
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
子句中定义它,并给它一个表别名(这里支持它们)。

您不能给在
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
子句中定义它,并给它一个表别名(这里支持它们)。

这修正了语法,我认为逻辑仍然需要改进。 请尝试(我没有检查):


T-SQL不允许在更新的表上定义别名, 但它允许更新别名:

这修正了语法,我认为逻辑仍然需要改进。 请尝试(我没有检查):


我认为当任何给定类型的电子邮件超过一封时,您会遇到一些问题。更新会将其中一封电子邮件的值复制到另一个表我认为当任何给定类型的电子邮件超过一封时,您会遇到一些问题。更新会将其中一封电子邮件的值复制到另一个表感谢您的回复。还有一件事是如果我想在dbo.EditEmail E上应用某些条件,请使用语法(即,从dbo.EditEmail E,其中Type='blahblah..')@Sukhi:只需在那里的WHERE子句中添加`AND E.Type='blahblah'`即可。更新了我的答案…感谢您的回复。还有一件事是,如果我想在dbo.EditEmail E上应用某些条件,语法会是什么(例如,从dbo.edite.e WHERE Type='blahblah..')@Sukhi:只需在WHERE子句中添加'AND e.Type='blahblah'。更新了我的答案。。。
UPDATE EN
SET EN.MailSubject = E.MailSubject,
    EN.MailMessage = E.MailMessage
FROM [DBUsers].[dbo].[EditEmail] EN
    join EditEmail E
on EN.Type = E.Type