SQL Nexus でレポートを作成する際に、一部の内容 (例: Perfmon Summary の Click here to view more CPU metrics) を表示する際に、次のエラーが発生することがあります。
System.Data.SqlClient.SqlException (0x80131904): 文字列から日付と時刻、またはそのいずれかへの変換中に、変換が失敗しました。 (英語だと Conversion failed when converting date and/or time from character string.)
原因については Perfmon CPU and Memory Reports failing with date time cast issue で報告がされており、取得データを成形するために使用している Relog の問題のようです。
問題が発生しているのは、「CounterData」というテーブルの CounterDateTime の日付データになります。この列は日付型データではなく、varchar(24) 日付形式の文字列となり、テーブルに対して SELECT を実行すると、一見すると正しいデータが入っているように見えます。
しかしこのデータを日付型の列を持つテーブルに INSERT 使用とすると上述のようなエラーが発生することが SSMS からのクエリ実行でも確認ができます。
上記のデータであれば「2022-12-21 12:01:06.533」という 23 文字の文字列なのですが、テーブルのデータ型が 24 バイトで確保されているところが、問題解決のポイントとなるようですね。
データを確認すると Issue で報告されているように最後に「00」というデータが含まれているようです。
最後の 1 バイトは削るかスペースに置き換えることでエラーを回避できるので、Issue に記載されている Update か、最後の一文字を削る Update のいずれかを実行することでエラーが解消しレポートを開くことができるようになります。
update counterdata set CounterDateTime =substring(CounterDateTime, 1,23) + char(32) from counterdata update counterdata set CounterDateTime =substring(CounterDateTime, 1,23) from counterdata