首页 > 解决方案 > 将 nvarchar 值“1000050TPAR”转换为数据类型 int 时转换失败

问题描述

运行此特定 SQL 查询时出现此错误。

以前可以用。不确定 ID 中的某些值(例如 1000050TPAR)是否会导致此操作失败。

CREATE TABLE #TempTable 
(
     [ID] INT,
     [CarID] VARCHAR (8), 
     [Dates] DATE 
) 
GO

INSERT INTO #TempTable ([ID], [CarID], [Dates])
    SELECT 
        ordnum AS [ID], 
        wh_id AS [CarID], 
        DATEADD(DAY, -10, CAST(GETDATE() AS DATE)) AS [Dates] 
    FROM
        ord 
    WHERE
        customer_id = '150' 
        AND moddte BETWEEN DATEADD(DAY, -10, GETDATE()) AND GETDATE()

SELECT * FROM #TempTable

DROP TABLE #TempTable
GO

标签: sqlsql-server

解决方案


此代码中唯一可能的整数转换是ordnum在加载到临时表时,因为相应的列用于整数。您可以使用以下方法找到有问题的值:

select ordnum
from ord
where try_convert(int, ordnum) is null;

不过,可能的解决方案是在临时表中使用与原始数据相同的类型。甚至将代码更改为:

select ordnum as [ID], 
       wh_id as [CarID], 
       dateadd(day, -10, cast(getdate() as date)) as [Dates] 
into #TempTable
from ord
where customer_id = '150' and 
      moddte between dateadd(day, -10, getdate()) and getdate();

那么你根本不需要声明列的类型。

where条款可能可以简化为,moddte >= dateadd(day, -10, getdate())因为修改日期不太可能在将来。


推荐阅读