2

2つの列を持つテーブルがあります-何らかの理由でintとしてのIDとnvarcharとして保存された日付です。

非クラスター化インデックスが最近IDフィールドに作成されました。クエリで、日付をnvarcharからdateに変換すると、「式をデータ型datetimeに変換する算術オーバーフローエラー」が発生します。例外。

クエリからidフィールドを削除すると、変換は完全に機能します。同様に、クエリから日付フィールドの変換を削除すると、完全に機能します。インデックスを削除すると、元のクエリは完全に機能します。

私の質問は、ID列のインデックスが、無関係だと思う日付列の変換を台無しにするのはなぜですか?

これについての説明は大歓迎です。そしてクエリは:

select e.date ,e.id as id from dbo.table1 e,dbo.table2 d with (nolock) 
where e.id=d.id and 
convert(datetime,e.date) between convert(datetime,'07/01/2012') 
and convert(datetime,'07/02/2012') group by e.date,e.id 
4

2 に答える 2

0

表の日付列に無効な日付値が含まれています。インデックスを追加し、返される列を変更すると、クエリのクエリ プランが変更され、無効な日付値が評価されます。

于 2012-07-12T05:55:59.190 に答える
0

etrast81

あなたのクエリを見て、一時を使用することをお勧めします。テーブルは最初に日付 nvarchar を datetime に変換してから、次のテーブルと結合します。

私はそれがうまくいくと思う

于 2012-07-12T05:02:17.743 に答える