2012-12-27 14 views
0

如何在此查詢中傳遞「@abo is null」和「@rh is null」....這會給出錯誤...我正在執行此操作如何在sql中的case語句中傳遞一個變量爲空

select Distinct m.donorId,m.customid, FirstName + ' ' + Isnull(MiddleName,' ') + ' ' + isNull(LastName,'') as donorName from m_donor as m inner join phlebotomyDetail as phy on m.DonorID=phy.DonorID left outer join AVIRaw as avi ON @prefix + RIGHT('000000' + CAST(m.DonorID AS VARCHAR(6)), 6) = avi.sampleid 
      Where (m.donorId = @donorid OR @donorid is null) and 
      (m.DOB = @todate OR @todate Is Null) and 
      (m.FirstName Like + '%' + @fullname + '%' OR m.MiddleName Like + '%' + @fullname + '%' OR m.LastName Like +'%' + @fullname + '%' OR @fullname Is Null) and 
      (m.cellPhone Like +'%' + @phone + '%' OR m.HomePhone Like + '%' + @phone + '%' OR m.WorkPhone Like + '%' + @phone + '%' OR m.OtherPhone Like + '%' + @phone + '%' OR @phone Is Null) and 
      (m.CustomID Like '%' + @custid OR @custid Is Null) AND 
      ([email protected] OR @bagno is NULL) AND 
      ([email protected] OR @segno is NULL) AND 
     (avi.result= CASE WHEN avi.AnalysisName = 'ABO' THEN @abo or @abo is null ELSE CASE WHEN avi.AnalysisName = 'RH' THEN left(@rh,3) or @abo is null END END) 
+0

你嘗試使用COALESCE? –

回答

0

我會嘗試這樣的:

avi.result= 
CASE WHEN avi.AnalysisName = 'ABO' 
THEN @abo 
ELSE 
    CASE WHEN avi.AnalysisName = 'RH' 
    THEN left(@rh,3) 
    END 
END 

的情況下的結果必須是類型與avi.result的類型兼容。

恕我直言,你應該把在第二/內情況下,ELSE,或使用語法:

avi.result= 
CASE avi.AnalysisName 
    WHEN 'ABO' THEN @abo 
    WHEN 'RH' THEN left(@rh,3) 
    ELSE 'DEF' 
END