サブクエリを代わりに使用するように、IN
ステートメント(結合条件にある)内の静的なvarcharsのリストを切り替えることによって実行するプロシージャを更新しようとしています。 。しかし、私はエラーが表示されますConversion failed when converting the varchar value 'Normal' to data type int.
結合の制約をvarcharsのリストからサブクエリに変更するときに変換が失敗する
私はそれが知っていることを知っている私は 'ノーマル'値をintに変換しようとしていますが、このクエリでは何もない場所がありませんint - それはすべてvarcharまたはdatetimeで、サブクエリは以前のvarcharsの静的リストと同じ値を返します。さらに、私のデータセットのどこにも "Normal"という値を持つ場所はありません。これは本当に私を混乱させるものです。
これまでに他の誰かがこのようなことをしたことがありますか?
EDIT:
はここで(単にエラーの原因となっている部分を表示するために縮小)コードです:
select * from #tempTable
left join dbo.v_Lookup_Assumptions Assumptions on
case when Group3 in
--('Value1', 'Value2', 'Value3')
(Select lookupdetail_name from lookupDetail)
then Group3 else Group2 end =Assumptions.Sector2
and AsOfDate between Assumptions.StartDate and Assumptions.EndDate
and ShortName = Assumptions.AssumptionShortName
私はサブクエリをコメントアウトし、値のリストのコメントを解除し、それが動作することができます。また、サブクエリを使用しているときに "ShortName"制約を実行しないと、期待通りの結果が得られません。すべての結合制約は、varcharまたはdateのいずれかです。
さらに、静的な値のリストに「標準」を追加し、期待どおりに実行しました。サブクエリをSELECT 'Value1' from lookupDetail
に更新しましたが、失敗しました。
EDIT2:
そして、これは意味がありませんが、私は、元#tempTable
2080に記録、新しい副問合せの構文の作品を制限している場合。しかし、もし私が2081レコードに行かせると、それはデータセットに関係なく失敗します。言い換えれば、日付を変更して毎回異なるデータを取得し、#tempTable
を2080レコードに制限するので、この新しい構文はうまくいきます。それを2081レコードに変更すると失敗します。 WHERE句で2081レコードのデータセットとフィルタを実行すると、2081レコードのすべての行が同時に2081すべてでない限り、表示されます。
"before"と "after"のコードを実際に読むのがちょっと助けることができる時代の一つだと思います – Lamak
私はこれまでと同じようなものに遭遇したと思います。 @lamakは助けになるコードを見る必要があります。 –
ノーマルはどこかに潜んでいなければなりません... – scsimon