【问题标题】:Update Particular Column in SQL更新 SQL 中的特定列
【发布时间】:2014-07-28 17:23:57
【问题描述】:

我有四个表(简化版)

客户:

    ClientID
    ManagerID
    UserID
    VolunteerID

经理

    ManagerID
    TeamID

用户

  UserID 

团队

  TeamID

我需要为特定团队更新特定客户端上的用户 ID (Client.UserID)

我想出了以下方法,但它似乎不起作用 - 客户端上的用户 ID 没有被更改:

    UPDATE C
    SET C.UserID = 28 
    FROM vTeams T 
    INNER JOIN Vmanagers M ON T.TeamID = M.TeamID
    INNER JOIN dbo.vClients C ON M.ManagerID = C.ManagerID
    INNER JOIN vUsers U ON C.UserID = U.UserID
    WHERE 
    T.TeamID = 251

TIA

【问题讨论】:

  • 您是否尝试过从这些联接和 where 子句中选择数据?它实际上返回任何数据吗?因为更新语句对我来说看起来不错。
  • 好的,对不起。我确实有一个 select 语句,但忽略了 select (291) 上更改的 TeamID - doh!!!
  • 这么想,因为你的更新声明看起来不错:)

标签: sql sql-server tsql


【解决方案1】:

编辑:这个答案适用于 MySQL,但我认为它不适用于 SQL Server...对不起..我会留下它,以防它对任何人都有帮助

我没有对此进行测试,但是 UPDATE 子句中没有 FROM,并且 SET 位于 JOIN 之后。试试这样的:

UPDATE dbo.vClients C
    INNER JOIN Vmanagers M ON M.ManagerID = C.ManagerID
    INNER JOIN Team T ON T.TeamID = M.TeamID
#    INNER JOIN vUsers U ON C.UserID = U.UserID
# not sure if you'll need the above join, based on the example
    SET C.UserID = 28 
    WHERE 
    T.TeamID = 251

【讨论】:

  • 您指定的更新查询将在 PL/SQL 中工作,只是它会在 SQL SERVER(T-SQL) 中引发错误跨度>
【解决方案2】:

我的错误是选择检查更新的错字

【讨论】:

    【解决方案3】:

    如果您的列是一个身份表,请尝试将其设置为关闭,然后运行您的脚本,然后将其返回,如下所示:

    SET IDENTITY_INSERT C ON
        UPDATE C
    SET C.UserID = 28 
    FROM vTeams T 
    INNER JOIN Vmanagers M ON T.TeamID = M.TeamID
    INNER JOIN dbo.vClients C ON M.ManagerID = C.ManagerID
    INNER JOIN vUsers U ON C.UserID = U.UserID
    WHERE 
    T.TeamID = 251
    
    SET IDENTITY_INSERT C OFF
    

    或者您可以执行多个用 AND 分隔的 where 语句,例如:

    UPDATE C
    SET C.UserID = 28 
    WHERE
    (M.TeamID =251
    AND
    C.ManagerID = 251
    AND
    U.UserID = 251
    AND
    T.TeamID = 251)
    

    或者这可能对您有所帮助: SQL update query syntax with inner join

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-01-29
      • 1970-01-01
      • 1970-01-01
      • 2016-03-14
      • 1970-01-01
      相关资源
      最近更新 更多