sql - 将 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
解决方案
此代码中唯一可能的整数转换是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())
因为修改日期不太可能在将来。
推荐阅读
- javascript - 如何在我的反应 js 页面中显示来自 json 数据的 html 代码?
- python - 如何解决django模型中的循环导入?
- openlayers - OpenLayers 计算两个坐标之间的距离给出了错误的答案
- c - 调用堆栈函数序言混乱
- jmeter - Jmeter-如何捕获从请求发送到在数据库中更新的时间?
- php - 检查变量是否不同,回显然后更新变量以重新检查
- java - 构造函数在 JUnit 测试期间为类方法返回 null
- java - Java不返回超类的值,将对象作为json传输时将字段返回为null
- python - 迁移到 heroku postgres db 时出错:为列“id”指定了多个默认值
- javascript - 条纹。TypeError:document.querySelectorAll 不是函数