データベースで見つけたばかりのクエリがあり、レポートが失敗する原因となっています。クエリの基本的な要点:
Select *
From table
Where IsNull(myField, '') <> ''
And IsNumeric(myField) = 1
And Convert(int, myField) Between @StartRange And @EndRange
現在、myField はすべての行に数値データを含んでいるわけではありません [nvarchar 型です]... しかし、このクエリは明らかに、このフィールドのデータが数値である行のみを考慮するように設計されています。
これに関する問題は、T-SQL (私が理解している限り) が Where 句を短絡しないため、例外を除いてデータが数値ではないレコードを破棄することです:
Msg 245, Level 16, State 1, Line 1
Conversion failed when converting the nvarchar value '/A' to data type int.
myField が数値であるすべての行を一時テーブルにダンプしてから、フィールドが指定された範囲内にある行を照会する以外に、何が最適でしょうか?
返されたデータを分析し、何が起こっているのかを確認するための純粋な私の最初の解析は次のとおりです。
Select *
From (
Select *
From table
Where IsNull(myField, '') <> ''
And IsNumeric(myField) = 1
) t0
Where Convert(int, myField) Between @StartRange And @EndRange
しかし、最初のクエリで行ったのと同じエラーが発生しますが、この時点では数値であってはならないデータを変換していないため、理解できません。サブクエリは、myField に数値データが含まれる行のみを返す必要があります。
朝のお茶が必要かもしれませんが、これは誰にとっても意味がありますか? 別の目のセットが役立ちます。
前もって感謝します