sql - 将 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)
,我不会收到任何错误。
为什么我会收到该错误消息?
解决方案
但是我不明白为什么我会收到该消息,因为我没有在上面的 sql 代码中使用 VariableDataId 列。
其实你在 where 条件下VariableData.VariableDataId = 10
。它导致该列中所有值的隐式转换为 int。
只需将比较修改为VariableData.VariableDataId = '10'
(其中 '10' 是字符串/varchar),不会执行隐式转换。
推荐阅读
- kubernetes - 节点上的 StatefulSet 副本具有共享内存
- javascript - 从 MapBox GL JS 中的聚类中排除某些特征
- google-cloud-platform - Big Query - 将 int 列转换为 float
- javascript - 在根据类型渲染组件时如何减少对 switch 语句的使用
- perl - 为什么我们需要 OpenDDS run_test.pl?
- python - 试图了解 Pytorch 中的“save_for_backward”是什么
- sql - 总和值为空时SQL返回行
- sql - 更新 PostgreSQL 10.11 中特定列中的多个值
- java - mvn checkstyle 插件:google_checks 未到达
- ios - 无论如何要在 macCatalyst 中构建 Couchbase Lite