sql-server - SQL Server 存储过程中的 CASTING 到 INT 问题
问题描述
我尝试在 SQL Server 中运行的存储过程遇到错误。我的部分程序如下所示:
WHERE
RM20101.CUSTNMBR NOT LIKE ('CR0002%')
AND RM20101.VOIDSTTS != 1
AND CAST(REPLACE(LEFT( RM20101.DOCNUMBR, CHARINDEX('-', RM20101.DOCNUMBR)), '-', '') AS INT) = 481492) a
WHERE
a.DocumentAmount != 0
CAST
我在这里做的会导致这个错误:
varchar 值 '02570000096' 的转换溢出了一个 int 列。
所以我尝试使用BIGINT
,如下所示:
WHERE
RM20101.CUSTNMBR NOT LIKE ('CR0002%')
AND RM20101.VOIDSTTS != 1
AND CAST(REPLACE(LEFT( RM20101.DOCNUMBR, CHARINDEX('-', RM20101.DOCNUMBR)), '-', '') AS BIGINT) = 481492) a
WHERE
a.DocumentAmount != 0
但这会产生此错误:
将数据类型 varchar 转换为 bigint 时出错。
我怎样才能以不会出错的方式处理这个问题?
解决方案
您的一行或多行包含不转换的值。考虑改用TRY_CONVERT或使用 where 子句过滤坏行
您也可以考虑根本不转换数据,而只是寻找WHERE column LIKE '481492-%'
或类似的。不转换意味着您有更多机会使用索引
推荐阅读
- javascript - 标记中的 HTML 标签,传单
- javascript - 手风琴展开/折叠所有没有 jQuery
- oracle - 如何解决 Oracle DBMS_LOB 的问题
- javascript - 递归组件和递归嵌套中的Vue拖放
- python - 系统日期更改Python时日期不更新
- c++ - 为什么我的并行数组显示随机值?
- dialogflow-es - 我可以将许多图片链接放在对话框流中并随机发送一个吗
- sql-server - 在 Visual Studio 数据库项目中处理部分数据库
- javascript - puppeteer 和选择器有问题
- reactjs - 表单提交时未显示反应表单值