私はツールを使用してSQLクエリを生成しており、複数のパラメータでクエリの1つをフィルタリングする必要があります。T-SQLパラメータのリストから別の値を取得
クエリは次のようになります。
Select *
From Products
Where (@ProductTypeIds is null or Product.ProductTypeId in (@ProductTypeIds))
私は基本的に..
を読み、上記のクエリは、伝統的なSQLに正しくないですけど、私は適用しようとしていますフィルター。@ProductTypeIds
パラメーターに何も渡されない場合、where条件は適用されません。複数のパラメータが渡されているとき
、しかし、@ProductTypeIds
は、次のクエリにツールによって翻訳されている:
Select *
From Products
Where (@ProductTypeIds1, @ProductTypeIds2 is null or Product.ProductTypeId in (@ProductTypeIds1, @ProductTypeIds2))
明らかに無効なクエリはどれ。
Select *
From Products
Where (COALESCE(@ProductTypeIds, null) is null or Product.ProductTypeId in (@ProductTypeIds))
このクエリは正しく変換されている、しかし、今COALESCE
の私の使用は、エラーがスローされます:
At least one of the arguments to COALESCE must be an expression that is not the NULL constant.
だから、私は賢いことと、彼らがnullかどうかを確認するためにCOALESCE
を使用して考えていました私は効率的にその@ProductTypeIds
をチェックすることができますか(@ProductTypeIds1, @ProductTypeIds2
に翻訳されているので、フィルタを適用するか無視しますか?
つまり、パラメータのリストはDistinct
ですか?最終結果がnull
かどうかを確認します。
おかげ
?この変数のタイプは何ですか? – Shnugo
@Shnugo C#の 'List'であり、Telerik Reportsに渡され、[多値nullableパラメータ](http://docs.telerik.com/reporting/designing-reports-parameters) –
LocustHorde
私は経験がありませんTelerikのレポート(btw:これはあなたの質問で与えるべき情報です)ですが、これは宣言されたテーブル変数またはSQL Serverの型だと思いますか?そうでなければ、ドキュメンテーションの指示どおりに "論理IN"で使用することはできませんでした。後で '@ ProductTypeIds1'(と... 2、... 3)について書くのですか?まあ。あなたは既に1つの答えを受け入れています。しかし... – Shnugo