我在复制表时遇到问题,我最终将其追溯到源表上的一致性错误,但我对导致一致性错误的原因感到困惑。
我运行了DBCC Checkdb,发现表上有如下错误
消息 2570,级别 16,状态 3,第 1 行页面 (1:5217772),对象 ID 1038014829 中的插槽 16,索引 ID 1,分区 ID 349502316544000,分配单元 ID 349502316544000(类型“行内数据”)。列“MHGPTX”值超出数据类型“varchar”的范围。将列更新为合法值。
我将 DBCC PAGE 用于表中的哪一行导致了问题,并追踪了有问题的行。
插槽 16 列 6 偏移量 0x28 长度 150
MHGPTX = [转换为字符串时出错(长度为 150 字节)]
这是我卡住的地方,字段中的数据看起来很好,数据远低于列的最大大小,我可以查询行等。
我在网上找到了一些类似问题的参考资料,其中通过使用相同数据更新行来解决问题,所以我尝试了,但没有任何改变。
任何建议将不胜感激
我会尝试:
我还会检查硬件(磁盘)是否存在不一致。
已经有一段时间了,但我意识到我从未更新过这个。
我发现错误是由双字节字符(亚洲语言)引起的,第二个字节被截断了。我能够通过将列增加一,然后将其更改回原始宽度来纠正问题。这截断了双字节字符的第一个字节,现在 checkdb 无误返回。