开发者社区 问答 正文

如何使用SQL Server中另一列中的数据更新列?

我有一个SQL Server表,其中有多个列2 Kwd和UserName。我正在尝试使用column UserName中的值更新column中的所有值Kwd。两列均为type 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

展开
收起
心有灵_夕 2019-12-22 14:28:07 644 分享 版权
阿里云 AI 助理回答

根据你的描述,你想要用UserName列的值去更新同一表中Kwd列的值。但是,从结果来看,所有行的Kwd列都被更新为了一个特定的值sa,这通常意味着在执行更新操作时,SQL Server没有正确识别或使用到UserName列的每个具体值。

这里有几个可能的问题和解决方案:

  1. 数据实际问题:首先检查UserName列是否确实包含了你期望用于更新的数据。有可能是大部分或者全部行的UserName列值实际上就是sa,导致更新后看起来每行都是这个值。

  2. 并发更新问题:如果在你的测试环境中同时有其他进程或查询也在更新这些记录,可能会导致你的更新结果不符合预期。确保在测试时没有其他操作干扰。

  3. 逻辑错误:你的第二个尝试使用了自连接,但实际上并不需要这样做来完成你的需求。正确的逻辑应该是直接用UserName的值去设置Kwd,而不是通过连接表自身。

  4. SQL语句错误:基于你的需求,正确的更新语句应该直接是:

    UPDATE test_table1 
    SET Kwd = UserName;
    

    你之前的尝试中,将列名的位置写反了,并且第二次尝试加入了不必要的自连接。

  5. 触发器影响:检查表上是否有触发器(trigger),特别是更新触发器,它可能在你的更新操作之后又改变了Kwd列的值为sa

  6. 列值长度限制:如果Kwd列的定义长度小于某些UserName的值,更新时可能会因为截断问题而看似无效。但这种情况通常会报错而不是静默替换为特定值。

建议先直接运行简化后的正确更新语句,并确保在执行前对表进行备份,以防不测。同时,检查是否有触发器或其他后台逻辑影响了更新过程。

有帮助
无帮助
AI 助理回答生成答案可能存在不准确,仅供参考
0 条回答
写回答
取消 提交回答