如何更新表拼接两列字符串?及拼接列加后缀更新失败排查
数据库更新语句无生效的问题排查与修复
让我来帮你拆解问题所在,你的更新语句没生效主要是两个关键错误导致的:
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
相关产品推荐
相关产品推荐

