.NET ページのグリッドに大量のデータを提供する T-SQL ストアド プロシージャがあります。そのため、ページの上部に「0 ~ 9」と各文字の選択肢を配置しました。ユーザーが文字をクリックしたときに、その最初の文字で始まる結果に基づいて結果をフィルタリングしたいようにします。製品名を使用しているとしましょう。したがって、ユーザーが「A」をクリックした場合、ストアド プロシージャのみが SUBSTRING(ProductName, 1, 1) = 「A」の結果を返すようにします。
私が困っているのは、数字で始まる製品名です。その場合、ISNUMERIC(SUBSTRING(ProductName, 1, 1)) = 1 のすべての ProductName 値をフェッチしたいと考えています。@FL という入力パラメータを使用しています。@FL はゼロになります (数値で始まる製品はほとんどないため、このようにひとまとめにします)。
もちろん WHERE SUBSTRING(ProductName, 1, 1) IN ('0', '1', '2'.....) という代替案もありますが、それでも CASE 文を考案できたことがありません。これは、一方の評価で = を実行し、もう一方の評価で IN ステートメントを実行します。
WHERE 句の CASE 部分の proc にあるものを次に示します。動作しませんが、疑似コードの観点からのみ価値がある場合があります。
アイデアをお寄せいただきありがとうございます。
AND CASE @FL
WHEN "0" THEN
CASE WHEN @FL = "0" THEN
isnumeric(substring(dbo.AssnCtrl.Name, 1, 1)) = 1
ELSE
SUBSTRING(dbo.AssnCtrl.Name, 1, 1) = @FL
END
END
*** この CASE ステートメントの使用が「非標準」であることはわかっていますが、オンラインで見つけて、何らかの見込みがあると考えました。しかし、単一の CASE ステートメントを使用しようとすると、同じ結果が得られました (「=」付近のエラー)。