sql查询如果参数为null

时间:2014-10-09 18:24:45

标签: sql sql-server-2008 parameters

我正在尝试在SQL 2008 R2中编写存储过程并遇到重大问题。它背后的查询应该提取名字,姓氏,余额和&案件类型。问题是,某些人(即结果)将具有相同的名称。所以我添加了一个参数@DOB来清除它们。如果有多个人具有相同的名称,则用户应该能够输入出生日期并且只能让该人回来。问题是......我无法让它发挥作用。这是我的查询 - 警告我使用别名我道歉如果它令人困惑地阅读:

SELECT cs.last_name ,
       cs.first_name ,
       cs.dob,
       cb.assessment_balance_due ,
       cb.case_number,
       ct.case_type_title
FROM vw_customer_service cs
INNER JOIN vw_case_balance cb ON cs.case_ID = cb.case_ID
INNER JOIN [case] on cs.case_ID = [case].case_ID
INNER JOIN cd_case_type ct ON [case].case_type_ID = ct.case_type_ID
WHERE **--(cs.dob =  case when @dob is null then cs.dob else @dob end )**  and
 cb.assessment_balance_due > 0
  AND cs.last_name = @LastName
  AND cs.first_name = @FirstName
  AND party_type_ID = 28 --defendant

  AND (@dob IS NULL)
GROUP BY 
         cs.case_ID, cs.last_name, cs.first_name , cb.Assessment_Balance_Due,DOB, cb.case_number, ct.case_type_title

如果用户放入DOB,这只会返回数据,但我希望这只是一个选项。如何根据一个参数过滤结果集或如果参数未关闭则根本不过滤?提前谢谢!

2 个答案:

答案 0 :(得分:1)

你可以这样做:

where (@dob is null or cs.dob = @dob) ...

答案 1 :(得分:1)

试试这个......

SELECT  cs.last_name , cs.first_name , cs.dob, cb.assessment_balance_due , cb.case_number, ct.case_type_title
from vw_customer_service cs 
INNER JOIN vw_case_balance cb on cs.case_ID = cb.case_ID
INNER JOIN [case] on cs.case_ID = [case].case_ID 
INNER JOIN cd_case_type ct on [case].case_type_ID = ct.case_type_ID


where (@dob is null or cs.dob=@dob)
and cb.assessment_balance_due > 0 
and cs.last_name = @LastName 
and cs.first_name = @FirstName
and party_type_ID = 28 --defendant 
--and (@dob is null)
group by cs.case_ID, cs.last_name, cs.first_name , cb.Assessment_Balance_Due,DOB, cb.case_number, ct.case_type_title