でグループを使用する場合、「データ型intに 『その他』のnvarchar値を変換する際の変換に失敗しました」エラーが表示されます。私は、次のSQL文を実行すると、私は句
SELECT
timecollected, SUM(waitingtaskscounttotal) waitingtaskscounttotal
FROM
(SELECT
timecollected, CAST(raw_value AS INT) AS waitingtaskscounttotal
FROM
spotlight_perfdata sp
JOIN
spotlight_stat_names sn ON sp.statistic_name_id = sn.statistic_name_id
AND sn.statistic_class_id = CONVERT(NVARCHAR, @statistic_class_id)
WHERE
sp.statistic_class_id = CONVERT(NVARCHAR, @statistic_class_id)
AND (sp.timecollected >= convert(NVARCHAR, @firstdate, 126)
AND sp.timecollected <= convert(NVARCHAR, @lastdate, 126))
AND sp.monitored_object_id = CONVERT(NVARCHAR, @monitored_object_id)
AND sn.statistic_name = 'waitingtaskscounttotal') TableA
GROUP BY
timecollected
ORDER BY
timecollected DESC
を私はエラーを取得:
Conversion failed when converting the nvarchar value 'MISCELLANEOUS' to data type int.
しかし、私は、SQL文から列timecollected
を取り除いた後、それが働いた:
SELECT
SUM(waitingtaskscounttotal) waitingtaskscounttotal
FROM
(SELECT
timecollected, CAST(raw_value AS INT) AS waitingtaskscounttotal
FROM
spotlight_perfdata sp
JOIN
spotlight_stat_names sn ON sp.statistic_name_id = sn.statistic_name_id
AND sn.statistic_class_id = CONVERT(NVARCHAR, @statistic_class_id)
WHERE
sp.statistic_class_id = CONVERT(NVARCHAR, @statistic_class_id)
AND (sp.timecollected >= convert(NVARCHAR, @firstdate, 126)
AND sp.timecollected <= convert(NVARCHAR, @lastdate, 126))
AND sp.monitored_object_id = CONVERT(NVARCHAR, @monitored_object_id)
AND sn.statistic_name = 'waitingtaskscounttotal') TableA
私は何が間違っているのか分かりません。
あなたのデータはraw_valueに 'MISCELLANEOUS'という値があり、これを** cast(raw_value AS INT)**としてintに変換しようとしているので、エラーが表示されます。 –
はい、raw_value列の型はsql_variantですが、値はMISCELLANEOUSですが、Where句でフィルタリングします。問題は2番目の文が動作する理由です。 –
問題は、クエリオプティマイザが評価方法を並べ替えることができることですこの文は、 'int'変換を試みる前に' where'節フィルタが適用されるという保証はありません。これは、バリアントを使用するデザインに対して常に推奨し、格納される可能性のあるさまざまなタイプの値に複数の列を使用することです(適切なチェック制約を使用して、正しい列がNULLになることを保証します。保存する) –