【发布时间】:2020-11-11 15:01:47
【问题描述】:
我遇到了一个存储过程的问题,导致:
将表达式转换为数据类型 int 时出现算术溢出错误。
这是两个表,第一个从 ODBC 连接中提取数据。数据包含活动及其开始时间。有一个每天运行的存储过程将这些开始时间转换为间隔。这在绝大多数情况下都有效,但去年有大约十几天由于算术溢出错误而失败。我试图将数据类型从 INT 更改为 Numeric,但这并没有解决问题。非常感谢任何帮助/想法/想法!
存储过程:
insert into [DB].[dbo].[Final_Table]
([resourceName]
,[eventdatetime]
,[EV2]
,[IntervalTime]
,[event])
(
SELECT DS1.[resourceName]
,DS2.[eventdatetime]
,DS1.[eventdatetime] as EV2
,CONVERT(varchar(8), DATEADD(ms, DATEDIFF(SECOND, DS2.[eventdatetime], DS1.[eventdatetime]) * 1000, 0), 114) AS [IntervalTime]
,DS2.[event]
FROM [DB].[dbo].[Staging_Table] DS1
INNER JOIN [DB].[dbo].[Staging_Table] DS2
ON DS1.[resourceName] = DS2.[resourceName]
AND DS1.[ID] = DS2.[ID] + 1)
暂存表:
CREATE TABLE [dbo].[Staging_Table](
[ID] [numeric](18, 0) IDENTITY(1,1) NOT NULL,
[resourceName] [varchar](50) NULL,
[eventdatetime] [datetime] NULL,
[event] [varchar](9) NULL,
PRIMARY KEY CLUSTERED
(
[ID] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
暂存表中的数据:
决赛桌:
CREATE TABLE [dbo].[Final_Table](
[resourceName] [varchar](50) NULL,
[eventdatetime] [datetime] NULL,
[EV2] [datetime] NULL,
[IntervalTime] [varchar](8) NULL,
[event] [varchar](9) NULL
) ON [PRIMARY]
GO
决赛桌数据:
【问题讨论】:
-
谢谢,我已经更新了帖子。显然我一直盯着屏幕太久了。
标签: sql sql-server tsql datediff dateadd