在更新中将 int 转换为 varchar 时遇到问题 [已关闭]

Trouble converting int to varchar in update [closed]

提问人:John 提问时间:10/9/2023 最后编辑:Thom AJohn 更新时间:10/9/2023 访问量:51

问:


这个问题是由错别字或无法再现的问题引起的。虽然类似的问题可能在这里是主题,但这个问题的解决方式不太可能帮助未来的读者。

上个月关闭。

我在 .intvarcharUPDATE

field1是计算列的结果。我需要它成为我想要的样子,而不是.intvarcahr'Y''1'

UPDATE table1 
SET field1 = CAST(field1 AS VARCHAR(1))
UPDATE table1 
SET field1 = CASE WHEN field1 = '1' THEN 'Y' ELSE 'N' END

将 varchar 值“Y”转换为数据类型 int 时转换失败。

sql-server 转换 整数 varchar

评论

2赞 Stu 10/9/2023
您没有投射您尝试更新的任何内容。如果是 INT,则不能是 'Y' 或 'N'y,因为它们不是 int。您应该将 case 表达式作为派生列进行处理。field1field1select
1赞 Thom A 10/9/2023
If 是一个计算列,也不是您会得到的错误;无法更新计算列。我希望您收到错误“无法修改列”field1“,因为它要么是计算列,要么是 UNION 运算符的结果。field1

答:

1赞 Simeon 10/9/2023 #1

如果查看 的列类型,则会看到 SQL Server 将其存储为field1int

如果要存储 varchar 值,则必须在表中添加新的 varchar 列

ALTER TABLE table1 ADD vfield varchar(1)

然后更新新添加的文本列

UPDATE table 1 SET vfield = CASE WHEN field1 = 1 THEN 'Y' ELSE 'N' END

这会导致表中出现冗余,您应该考虑使用视图或查看输出的格式。

将 Y/N 值存储为位类型列 (1,0) 并在可视化工具中将其动态格式化为“是”或“否”会更有效