UPDATE操作中int转varchar报错,如何将int字段替换为'Y'/'N'?
解决Int转Varchar并替换值的SQL报错问题
报错原因
field1是int类型字段(或int类型计算列),你试图将字符串'Y'/'N'存入int类型字段时,数据库会自动尝试把'Y'转换为int类型,这必然失败,因此抛出Conversion failed when converting the varchar value 'Y' to data type int错误。另外你之前的两次UPDATE逻辑无效:第一次把int转成varchar再赋值回int字段,数据库会自动转回int类型,等于没修改;第二次直接赋值字符串,直接触发类型转换错误。
解决方案
分两种场景处理:
场景1:field1是普通int字段(或持久化计算列)
先修改字段数据类型为varchar,再执行替换更新:
-- 第一步:修改字段类型为varchar(1) ALTER TABLE table1 ALTER COLUMN field1 VARCHAR(1); -- 第二步:替换值 UPDATE table1 SET field1 = CASE WHEN field1 = '1' THEN 'Y' ELSE 'N' END;
场景2:field1是非持久化计算列
非持久化计算列的值由表达式实时生成,无法直接UPDATE,必须重新定义计算列的表达式,让它直接返回'Y'/'N':
-- 先删除原计算列 ALTER TABLE table1 DROP COLUMN field1; -- 重新添加计算列,将[你的原int计算表达式]替换为实际生成int值的逻辑 ALTER TABLE table1 ADD field1 AS (CASE WHEN [你的原int计算表达式] = 1 THEN 'Y' ELSE 'N' END); -- 如果需要持久化存储计算后的值,可加上PERSISTED关键字: -- ADD field1 AS (CASE WHEN [你的原int计算表达式] = 1 THEN 'Y' ELSE 'N' END) PERSISTED;
内容的提问来源于stack exchange,提问作者John
相关产品推荐
相关产品推荐

