【问题标题】:How do i update a table column based on a condition?如何根据条件更新表列?
【发布时间】:2011-07-01 21:20:59
【问题描述】:

两个表:

StoreInfo:
UserId uniqueidentifier
StoreNo nvarchar
UserName nvarchar
Password nvarchar

UserInfo:
UserId uniqueidentifier
UserName nvarchar
Password nvarchar

StoreInfo 上的 UserId 当前为空。如何根据 StoreInfo 的 UserName 和 Password 使用 UserInfo 的 UserId 更新 StoreInfo 的 UserId 与来自 UserInfo 的 UserName 和 Password 匹配。

以下是我编写的查询,它使用来自 UserInfo 的第一个 UserId 更新 StoreInfo 中的整个 UserId,所以我知道这是错误的。

declare @UserName nvarchar(255)
declare @Password nvarchar(25)
declare @UserId uniqueidentifier

select @UserName = UserName, @Password = Password, @UserId = UserId
from UserInfo

select UserId, Password 
   from FranchiseInfo 
   where UserID = @UserName and Password = @Password

update FranchiseInfo
set UserI = @UserId

【问题讨论】:

  • 过早的优化是编程中万恶之源。

标签: tsql


【解决方案1】:

更新看起来像这样

update storeinfo
set userid = u.userid
from userinfo u 
inner join storeinfo s on (s.username = u.username and s.password = u.password)
where userid is null

【讨论】:

    【解决方案2】:

    最有效的方法是UPDATE ... FROM语法,例如

    UPDATE StoreInfo
    SET
        UserId = ui.UserId
    FROM
        StoreInfo si
        INNER JOIN UserInfo ui ON ui.UserName = si.UserName AND ui.Password = si.Password;
    

    【讨论】:

    • 谢谢。您的解决方案更易于理解。
    【解决方案3】:
    UPDATE StoreInfo
     set UserId = ui.UserId
     from StoreInfo si
      inner join UserInfo ui
       on ui.UserName = si.UserName
        and ui.Password = si.Password
     where si.UserId is null
    

    这将更新表中未设置 UserId 的所有行。如果您只想更新选定的行,请构建 where 子句。 (我还没有测试过,所以请注意拼写错误!)

    【讨论】:

      猜你喜欢
      • 2017-11-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-03
      • 2017-08-06
      • 1970-01-01
      • 2016-10-24
      • 1970-01-01
      相关资源
      最近更新 更多