首页 > 解决方案 > 将 varchar 值“A001”转换为数据类型 int 时出错

问题描述

我正在开发一个生成 JSON 字符串的 SQL Server 2016 SP2 存储过程。

当我运行它时,这段代码:

set @batch = (
    select 1 as [BatchId], Value as [Name], (CAST(SYSDATETIMEOFFSET() as varchar(34))) as [Created]
        from VariableData
        where VariableData.ProductionOrderId = @productionOrderId and VariableData.VariableDataId = 10
    for json path, WITHOUT_ARRAY_WRAPPER
);

有了这些数据: 在此处输入图像描述

生成以下错误:

将 varchar 值“A001”转换为数据类型 int 时出错

但我不明白为什么我会收到该消息,因为我没有使用VariableDataId上述 sql 代码中的列。

VariableDataId如果列(类型)中没有任何字符varchar(4),我不会收到任何错误。

为什么我会收到该错误消息?

标签: sqljsonsql-servertsql

解决方案


但是我不明白为什么我会收到该消息,因为我没有在上面的 sql 代码中使用 VariableDataId 列。

其实你在 where 条件下VariableData.VariableDataId = 10。它导致该列中所有值的隐式转换为 int。

只需将比较修改为VariableData.VariableDataId = '10'(其中 '10' 是字符串/varchar),不会执行隐式转换。


推荐阅读