You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何更新表拼接两列字符串?及拼接列加后缀更新失败排查

数据库更新语句无生效的问题排查与修复

让我来帮你拆解问题所在,你的更新语句没生效主要是两个关键错误导致的:

1. 变量声明与逻辑使用错误

你声明@creativity varchar时没有指定长度,在SQL Server中,未指定长度的varchar默认仅为1个字符长度。更关键的是,你在WHERE子句里用了@creativity=Creativity,但这个变量此时根本没有被赋值,它的初始值是NULL。在SQL的逻辑判断里,NULL和任何值比较的结果都是UNKNOWN,这直接导致整个WHERE条件不成立,自然没有任何行被选中更新。

2. 冗余变量的使用

其实你根本不需要中间变量@creativity,直接用Creativity字段和.AVI拼接就可以完成需求,这样既简洁又避免变量带来的问题。

修正后的代码

最优方案(直接字段拼接)

update [UK_Telco_Pressure_2018Q3_2019-02-26 W6] 
set Video_Name = concat(Creativity, '.AVI')
where Video_Name = 'false'

如果确实需要使用变量的场景(比如有额外逻辑)

如果因为某些原因必须用变量,记得先给变量赋值,并且指定足够的长度:

-- 根据Creativity字段的实际长度调整变量长度,比如255
declare @creativity varchar(255)

-- 先给变量赋值(注意:如果有多条符合条件的记录,变量只会存储最后一条的Creativity值)
select @creativity = Creativity 
from [UK_Telco_Pressure_2018Q3_2019-02-26 W6] 
where Video_Name = 'false'

-- 执行更新
update [UK_Telco_Pressure_2018Q3_2019-02-26 W6] 
set Video_Name = concat(@creativity, '.AVI')
where Video_Name = 'false'

额外提示

  • 注意大小写敏感性:如果你的数据库排序规则是区分大小写的,Video_Name = 'false'和Video_Name = 'FALSE'会匹配不同的行。如果需要忽略大小写,可以改成LOWER(Video_Name) = 'false'。
  • 建议先执行SELECT * FROM [UK_Telco_Pressure_2018Q3_2019-02-26 W6] WHERE Video_Name = 'false'确认符合条件的记录数量,再执行更新语句,这样更安全。

内容的提问来源于stack exchange,提问作者Jurij

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.12 04:00:46