【问题标题】:datediff error on SQL query but not using datediff at allSQL查询上的datediff错误,但根本不使用datediff
【发布时间】:2022-09-25 17:36:17
【问题描述】:

我收到此错误:

消息 535,第 16 级,状态 0,第 2 行
datediff 函数导致溢出。分隔两个日期/时间实例的日期部分的数量太大。尝试将 datediff 与不太精确的日期部分一起使用。

我正在使用 SQL Server 2008。我没有使用 datediff 函数,但我在上面遇到了溢出错误。下面的查询适用于我的一个具有相同结构的数据库,但它不适用于不同服务器上的该数据库。我是否必须更改一些数据库设置才能使此查询正常工作?

SELECT [EventStamp]
      ,[AlarmState]
      ,[TagName]
      ,[Description]
      ,[Area]
      ,[Type]
      ,[Value]
      ,[CheckValue]
      ,[Priority]
      ,[Category]
      ,[Provider]
      ,[Operator]
      ,[DomainName]
      ,[UserFullName]
      ,[AlarmDuration]
      ,[User1]
      ,[User2]
      ,[User3]
      ,[EventStampUTC]
      ,[MilliSec]
      ,[OperatorNode]
  FROM [A2ALMDB].[dbo].[v_AlarmEventHistory2]
  WHERE [EventStamp] >= \'2022-08-25\' AND [EventStamp] <= \'2022-08-26\' 
  ORDER BY [EventStamp] ASC
  • \"table\" [v_AlarmEventHistory2] 实际上可能是一个带有计算字段的视图,其中一个计算字段中的某些内容正在使用 Datediff。这是线索:您的 DBA 使用 v_ 前缀命名对象,这应该提示您认为这是一个计算对象(视图)。
  • 猜测一下,DBA 可能使用DATEDIFF 截断了MilliSec 值,并使用了一个过去太远的时期,导致溢出。

标签: sql sql-server sql-server-2008


【解决方案1】:

您正在使用的视图[A2ALMDB].[dbo].[v_AlarmEventHistory2]包含 DATEDIFF 函数并且由于日期中存在 NULL 的原因或其提取的日期部分溢出其自然值限制而导致其溢出。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多