【问题标题】:Conversion issue with sql update statementsql更新语句的转换问题
【发布时间】:2018-04-09 09:49:10
【问题描述】:

我有更新语句一直失败。

 Update dbo.Marker 
 set MarkId= case 
                when Ninja = 55 and cast(Tometo as varchar) = 0031A then 22 
                else MarkId 
             end

MarkId 的数据类型是 int 数据类型, Ninja 是 int 数据类型,Tometo 是 varchar (9)。

这是我遇到的错误

消息 245,第 16 级,状态 1,第 48 行 将 varchar 值“031A”转换为数据类型 int 时转换失败。

【问题讨论】:

  • 字符串必须被引用'0031A'varchar 需要大小varchar(n) - 但你大概想与字符串进行比较,它必须已经是字符数据?
  • 我已对“0031A”进行了更改
  • 消息 245,级别 16,状态 1,
  • 将 varchar 值 '0031A' 转换为数据类型 int 时转换失败。

标签: tsql


【解决方案1】:

您在 0031A 周围缺少引号

Update dbo.Marker 
set MarkId= case 
              when Ninja = 55 and cast(Tometo as varchar) = '0031A' then 22 
              else MarkId 
            end

要查找导致问题在查询下方运行的行

select case 
         when Ninja = 55 and cast(Tometo as varchar) = '0031A' then 22 
         else MarkId 
       end
from dbo.Marker 

然后找出哪些行返回非整数值。如果没有您的数据,我无法提供更多帮助。

【讨论】:

  • @MJ8 这是因为 Flicker 忘记将长度放在 varchar 旁边,使其默认为 1。现在试试吧。你也应该在你的代码中改变它,除非它实际上只是一个字符。
  • @scsimon,如果我们不指定长度,它将根据需要考虑。所以不需要指定长度。
  • 我没有意识到继承与声明不同。
  • @MJ8,你还在报错吗?同样的错误?如果没有,请告诉我更多细节
  • 你为什么选择 (64) 而不是 varchar (9) ?
猜你喜欢
  • 1970-01-01
  • 2018-03-10
  • 2012-03-20
  • 1970-01-01
  • 2014-08-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多