首页 > 解决方案 > 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 时出错。

我怎样才能以不会出错的方式处理这个问题?

标签: sql-server

解决方案


您的一行或多行包含不转换的值。考虑改用TRY_CONVERT或使用 where 子句过滤坏行

您也可以考虑根本不转换数据,而只是寻找WHERE column LIKE '481492-%'或类似的。不转换意味着您有更多机会使用索引


推荐阅读