【问题标题】:Where's the bug in this simple UPDATE FROM query?这个简单的 UPDATE FROM 查询中的错误在哪里?
【发布时间】:2012-04-12 19:45:39
【问题描述】:

这应该很简单,但我想把它做对,因为我正在对实时数据库进行更改(它已备份)。

我将一些列值从 CSV 文件导入到数据库表中。

现在我只想从导入的源表(查询中的 S)更新目标表(查询中的 T)。

我收到错误:The multi-part identifier "T.account_manager_id" could not be bound.

update DADatabaseMarch2012.dbo.Campaign

set 
    T.[account_manager_id]=S.[account_manager_id]
   ,T.[campaign_status_id]=S.[campaign_status_id]
   ,T.[ad_manager_id]=S.[ad_manager_id]
   ,T.[advertiser_id]=S.[advertiser_id]
from 
    [zMarch12CampaignsRestore].[dbo].[March12Eom_Campaigns] S
    inner join DADatabaseMarch2012.dbo.Campaign T ON S.id = T.id

【问题讨论】:

标签: sql sql-server tsql


【解决方案1】:

这样写,使用别名作为UPDATE的目标。

update T

set 
    [account_manager_id]=S.[account_manager_id]
   ,[campaign_status_id]=S.[campaign_status_id]
   ,[ad_manager_id]=S.[ad_manager_id]
   ,[advertiser_id]=S.[advertiser_id]
from 
    [zMarch12CampaignsRestore].[dbo].[March12Eom_Campaigns] S
    inner join DADatabaseMarch2012.dbo.Campaign T ON S.id = T.id

【讨论】:

  • 这真的有效吗?我认为 update 子句需要引用与 from 子句完全相同的表。看我的回答。
  • @usr 是的,它有效。如果您在 UPDATE 中为表设置别名,则必须将 alias 指定为目标
  • 我知道,但您没有在 from 中使用该表。您在连接中使用它。令人惊讶的是,这是有效的。
  • 不,我确实在连接中使用了 T 作为别名的表......也许我们中的一个人感到困惑(我的意思是“它可能是我”的方式)?
  • @usr 这是一个内部连接,所以没关系
【解决方案2】:

由于 T 是目标表,因此您不必在赋值(SET)的左侧为其命名。

【讨论】:

    【解决方案3】:

    编辑:您需要在更新中引用与 from 子句中相同的表。写“更新T”。

    【讨论】:

      猜你喜欢
      • 2015-12-23
      • 1970-01-01
      • 2021-03-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-10-14
      • 1970-01-01
      • 2011-03-11
      相关资源
      最近更新 更多