0

次のような大きな SQL クエリがあります。

Select Distinct [Student].[Class].roll_nbr as [PERIOD-NBR],[Student].[Class].ent_nbr as [CLASS-NBR],
  IsNull(Stuff((SELECT CAST(', ' AS Varchar(MAX)) + CAST([Student].[Subject].ent_nbr AS Varchar(MAX))
FROM [Student].[Subject]
WHERE [Student].[Subject].roll_nbr = [Student].[Class].roll_nbr
and ([Student].[Subject].class_nbr = [Student].[Class].roll_assignment_nbr
     or ([Student].[Class].roll_assignment_nbr = '0'
     and [Student].[Subject].class_nbr = [Student].[School].bus_stop) )
AND [Student].[Subject].ent_nbr <> ''
FOR XML PATH ('')), 1, 2, ''), '')
AS [OLD-STUDENT-NBR.OLD],IsNull(Stuff((SELECT CAST(', ' AS Varchar(MAX)) + ....

それは延々と続き、レポートを作成するページの長いクエリです。私が抱えている問題は、いくつかの変数がメッセージでエラーになっていることです:

Error converting data type varchar to numeric.

これは非常に一般的なエラーで、どの変数かわかりません。SQL 2008でエラーになっている変数を特定する方法はありますか?

4

3 に答える 3

1

列の半分をコメント アウトします。エラーが続く場合は、残りの半分をコメント アウトします。エラーが停止した場合は、コメントアウトしたセクションにあります。すすぎを繰り返します。

于 2013-08-19T20:21:56.247 に答える
0

過去にこの種のエラーに直面したとき、クエリの一部をコメントアウトしてエラーを絞り込み、実行されるかどうかを確認してから、クエリの一部のコメントを外して、エラーが正しく表示されるようにしました。

于 2013-08-19T20:21:38.720 に答える
0

私が知っていることではありません。ただし、次の手順を試すことができます。

1) 変換される列を特定します。
2) それらの半分で選択を実行します。うまく実行できれば、問題は後半にあります。
3) 候補が 1 つになるまで、2 (列の数を半分にする) を繰り返します。

クエリの実行に時間がかかる場合は、問題が複数の列に影響している可能性があるため、試行されたすべての組み合わせとその結果を追跡してください。これはにつながります:

4) 問題が続く場合は、影響を受ける 2 番目の列があります。問題なく実行されたクエリに存在するすべての列と、発見されたばかりの間違った列を破棄し、2) でこのセットからやり直します。

5) 元のクエリ (および必要な変更) が問題なく実行されるまで繰り返します。

于 2013-08-19T20:22:41.143 に答える