パソコン関連の書籍等を読んで試したりしながらアウトプットしまくります。

アウトプットしながら学ぶ

SQL server VB.net データベース プログラミング

「 System.Data.SqlClient.SqlError: インデックスが壊れている可能性があります。DBCC CHECKDB を実行してください。」エラーの原因の1つ

投稿日:

VB.netで以下のエラーが発生しました。

System.Data.SqlClient.SqlError: インデックスが壊れている可能性があります。
DBCC CHECKDB を実行してください。

原因不明ですが、調査して問題回避できたので、参考のため記述します。

DBCC CHECKDBを実行してくださいと書いてあるので、
実行してみましたがエラーは解消されませんでした。

エラーの内容を詳しく見てみます。
以下のように表示されています。

System.OverflowException: 'SqlDateTime のオーバーフローです。1/1/1753 12:00:00 AM から 12/31/9999 11:59:59 PM までの間でなければなりません。'

.netの問題なのかどうかを確かめるため、
SQL server Management Studioでも実行してみました。
次のエラーがでます。

バッチの実行中にエラーが発生しました。エラー メッセージ: SqlDateTime のオーバーフローです。1/1/1753 12:00:00 AM から 12/31/9999 11:59:59 PM までの間でなければなりません。

今回エラーが発生しているSQL文は、3つのテーブルをINNER JOINで結合して集計しています。

3つのテーブルを全部、SELECT してみたところ、1つのテーブルで同じエラーがでました。
さらに一行ずつ読み込むことでエラーの原因となっている行を発見することができました。

この1行を削除することで、エラーは発生しなくなりました。

データベースの時刻のフィールドのデータが壊れていたようですが、原因は不明です。
SQL serverの内部で、該当行を参照しないようなSQL文を書くことができれば同じ問題が
発生しても回避できそうですが、いろいろやってもだめでした。
今回の場合、GROUP BY句を使わなければエラーはでないようです。







-SQL server, VB.net, データベース, プログラミング

Copyright© アウトプットしながら学ぶ , 2024 AllRights Reserved Powered by AFFINGER4.