3

执行查询DBCC CHECKDB WITH NO_INFOMSGS失败,出现以下错误:

页面 (1:2772455),对象 ID 689489585 中的插槽 8,索引 ID 1,分区 ID 72057594305052672,分配单元 ID 72057594619953152(类型“行内数据”)。列“日期”值超出数据类型“日期时间”的范围。

将列更新为合法值。

我在DBCC checkDB为数据库的特定表运行命令时收到上述消息,当我尝试通过运行以下查询来获取该表的日期列时:-

select [date] 
from  [TableName] 
where [Year] = 2011 
  and Month = 1 
  and [Date] < '1753-01-01'
  and Date > '9999-12-31'
4

3 回答 3

0

您可以尝试使用这样的Between关键字:-

  select [date] from  [TableName] where [Year]=2011 and Month=1 and [Date] between ('1753-01-01','9999-12-31')
于 2012-12-02T08:50:04.113 回答
0

首先你的WHERE clause没有意义

  1. 您正在寻找早于“1753-01-01” 晚于不存在的“9999-12-31”的日期。
  2. [Year] = 2011意味着您只需要 2011 年的记录,根本不需要按日期范围进行过滤。出于某种原因,如果你需要它应该是[date] BETWEEN '17530101' AND '99991231
  3. 建议使用ISO date formatwhich is yyyymmdd(ie; '17530101')。这可能是日期超出范围错误的原因。

    我认为这可以完成工作;

      SELECT [date] FROM  [TableName] WHERE [Year] = 2011 AND Month = 1 
      --AND [date] BETWEEN '17530101' AND '99991231' 
      --This filter does not make sense as you have already filtered by 2011.
    
于 2012-12-02T09:57:06.047 回答
0

您有包含损坏值的页面 (1:2772455),运行此命令以准确找出导致问题的行:

DBCC TRACEON ( 3604 )
DBCC PAGE ( 'dbname' , 1 , 2772455 , printopt=3 )
DBCC TRACEOFF ( 3604 )

搜索“INVALID”,您会发现 Date = INVALID COLUMN VALUE。向上滚动并获取主键。然后,您可以使用正确的日期更新该行。

于 2022-02-18T15:04:01.857 回答