2017-03-02 89 views
0

在此存儲過程中,當@Id爲5時,我想要使用Id的3和5獲取記錄。我該如何實現?存儲過程中字段的多值

CREATE PROCEDURE spEmployee 
    @EmployeeName NVarchar(100), 
    @Id int, 
AS 
    SET NOCOUNT ON 

    SELECT * 
    FROM tblEmployees 
    WHERE EmployeeName = CASE 
          WHEN @EmployeeName IS NOT NULL 
           THEN @EmployeeName 
           ELSE EmployeeName 
         END 
     AND Department = CASE 
          WHEN @Id IS NOT NULL 
          THEN @Id 
          ELSE Id 
         END 
GO 

回答

0

事情是這樣的:

select * 
from tblEmployees 
where (EmployeeName = @EmployeeName or @EmployeeName is null) and 
     (@id is null or 
     @id = 5 and Department = 3 or 
     Department = @id 
    ); 

一般來說,where子句中使用case語句使代碼有點難以理解(它只是另一種除了布爾運算符) 。

兩個很好的理由使用在where一個case是:

  • 因爲在select一列使用相同的邏輯。
  • 因爲您需要順序評估以防止某種錯誤或確保很少執行昂貴的功能。

否則,最好堅持andor

+0

爲什麼我將代碼更改爲'@id = 5和Id = 3和Id = 2',它使我只是id = 5 –

+0

@E_N_Y。 。 。我不知道'id = 2'來自哪裏。也許你的意思是'@id = 5和部門在(2,3)'中。 –

相關問題