我有一张表,其中包含可以是admin,dev,both或者
的员工列表EMP_ID IS_ADMIN IS_DEV 1 Y Y 2 Y N 3 N Y 4 N N
我想写一个查询,以便在我请求时
是否有将此登录信息合并到一个查询中?
答案 0 :(得分:0)
将所有选项指定为参数,将null传递给您不关心的任何参数,并将null作为查询条件进行检查。你的逻辑有点弯曲,所以必须对每一个组合进行编程:
SELECT
emp_id
FROM
emps
WHERE
(is_admin = 'Y' AND :isadmin = 'Y' AND :isdev is null)
OR
(is_dev = 'Y' AND :isdev = 'Y' AND :isadmin is null)
OR
(:isadmin = 'Y' AND :isdev = 'Y' AND (is_admin = 'Y' OR is_dev = 'Y'))
OR
(COALESCE(:isadmin, 'N') = 'N' AND COALESCE(:isdev, 'N') = 'N' AND is_admin = 'N' AND is_dev = 'N')
如果没有意见,您选择的主叫语言会将参数设置为“Y”,“N”或null。在c#中为您的案例1:
sqlCommand.Parameters["isadmin"].Value = "Y";
sqlCommand.Parameters["isdev"].Value = DBNull.Value;
using(var reader = sqlCommand.ExecuteReader()) ....