オプションのパラメーター empName と empLoc が 2 つあります。これらのパラメーターは両方とも、null、空、または何らかの値を持つことができます。両方に値がある場合は、すべての値を取得する必要があります。empName に値がある場合は、empName が渡されたパラメーター @empName と等しい値のみを取得する必要があり、@empLoc と同じです。同じストアド プロシージャに個別の SQL を記述できることはわかっていますが、繰り返されるコードのほとんどを保存するため、CASE 句を使用して行いたいと考えています。ただし、クエリの設定中に問題が発生しています。そして、それが CASE 句であることを知っています。私のクエリは次のようになります。
SELECT
EmpID,
EmpDept
FROM Employee
WHERE TimeStamp = @timeStamp
**AND (CASE
WHEN DATALENGTH(@empName) > 0 THEN EmployeeName LIKE '%' +@empName+'%'
ELSE
EmployeeLocation LIKE '%' +@empLoc+'%'
END)**
注:これらのパラメーターのnullチェックはすでに行っています。また、このクエリは、@empName または @empLoc のいずれかに何らかの値がある場合にのみ実行されます。
これを修正する方法はありますか?