【问题标题】:How to update a column with data from another column in SQL Server?如何使用 SQL Server 中另一列的数据更新一列?
【发布时间】:2019-12-21 08:58:40
【问题描述】:

我有一个 SQL Server 表,其中包含多个列 2,其中 KwdUserName。我正在尝试使用列Kwd 中的值更新列UserName 中的所有值。两列的类型均为nvarchar

我正在使用以下查询。

UPDATE test_table1 
SET UserName = Kwd

我也试过

SET a.UserName = B.Kwd 
FROM test_table1 a 
INNER JOIN test_table1 b ON a.PelID = b.PelID

但是它会更新值为“sa”的所有列,有什么问题吗?

更新 1:

我已尝试测试一种更简单的方法,以查看运行查询时会发生什么:

UPDATE test_table1 
SET UserName = 'test'

它仍然使用值sa 更新所有行

【问题讨论】:

  • 这张表有触发器吗?
  • @Suraj_Kumar 是的,你是对的。有一个触发器。删除触发器后立即更新。但是现在基于此数据库的软件无法加载。噗噗

标签: sql-server sql-update


【解决方案1】:

您可以尝试如下所示。

UPDATE a 
    SET a.UserName = b.Kwd
    FROM test_table1 a INNER JOIN test_table1 b ON a.Id= b.Id

你也可以试试下面的查询。

update test_table1 
   set test_table1.UserName = B.Kwd
  from test_table1 B

您可以点击链接Inner join update in SQL Server

这是一个带有示例数据的示例。

create table test_table1 (PelID int, Kwd varchar(10), UserName varchar(10))
insert into test_table1 Values (1, 'A', 'B'), (2, 'K', 'P'), (3, 'N', 'S'), (4, 'G', 'H'), (5, 'T', 'F')

Select * from test_table1

UPDATE a 
    SET a.UserName = b.Kwd
    FROM test_table1 a INNER JOIN test_table1 b ON a.PelID = b.PelID

Select * from test_table1

update test_table1 
   set test_table1.UserName = B.Kwd
  from test_table1 B

Select * from test_table1

这个输出可以在link上查看

【讨论】:

  • 两列都来自同一个表。我需要使用 INNER JOIN 来更新同一个表中的列吗?
  • @Meni 您也可以通过加入或不加入来完成。我已经更新了我的答案,请检查。
  • 这快把我逼疯了。我已经尝试了你的两种方法,它们产生了相同的结果。该命令通过而没有错误。然而,用户名列中的所有行都变为sa
  • 出现了严重错误。即使我尝试,我也会得到相同的结果:UPDATE test_table1 UserName = 'test'
  • 有一个触发器产生了不理想的结果。删除触发器后,表已正确更新。谢谢
【解决方案2】:
UPDATE test_table1 SET UserName = test_table1.Kwd WHERE test_table1.id=some_id

输入记录id

【讨论】:

  • 我想更新表中的所有行。我尝试指定一个 id 以更新特定的 ro,它会产生相同的结果。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-09-16
  • 2013-09-05
  • 1970-01-01
  • 2011-04-18
  • 2015-06-04
  • 2019-03-03
  • 1970-01-01
相关资源
最近更新 更多