2017-03-11 37 views
1
CREATE PROCEDURE [GetSubscriptions] 
@id uniqueidentifier, 
@isActive bit 
AS 
BEGIN 
SELECT 
* 
FROM SUBSCRIPTION 
WHERE [email protected] and IsActive= @isActive 
END 
GO 

我想在此使用它創建multifuntional存儲過程way-使用位參數

  1. 當@isActive = 1,它將返回積極認購行。 - 它的作品
  2. 當@isActive = 0時,它將返回不活動的訂閱行。 - 它的作品
  3. IsActive Fiag的獨立性,它將返回所有訂閱行 - ?

認購表只有兩個值IsActive是0和1 會是什麼使得它適用於所有這三個條件呢?在此先感謝:-)

回答

1

@isActive最好一小段路可以有三種狀態:0,1或NULL。
只需添加東西NULL到您的where子句:

CREATE PROCEDURE [GetSubscriptions] 
@id uniqueidentifier, 
@isActive bit 
AS 
BEGIN 
SELECT 
* 
FROM SUBSCRIPTION 
WHERE [email protected] and (IsActive= @isActive or @isActive is NULL) 
END 
GO 

or的雙方永遠不可能在同一時間如此,因爲使用=永遠是假的比較VS NULL。如果@isActive爲NULL,則or爲True,無論中的isActive列的值如何。

+0

感謝但訂閱表只有兩個IsActive值是0和1. – APL

+2

當然是的。您詢問如何返回訂閱表的所有行,並且對sproc的最簡單更改是將@isActive作爲NULL傳遞,如果是,則不關心列值是什麼。 – cco