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

を使用してmultifuntionalストアドプロシージャを作成、私はこの中で、それを使用したいがビット引数

  1. をway-。 -it works
  2. @isActive = 0の場合、非アクティブなサブスクリプション行が返されます。 -it works
  3. IsActive Fiagとは別に、すべてのサブスクリプション行を返します。

サブスクリプションの表には、それはすべての3つの条件のために動作するように最善の短い方法だろうどのような0と1 あるのisActiveのための唯一の2つの値を持っている?

答えて

1

@isActive缶:-)事前に感謝を0、1、またはNULLの3つの状態があります。
はちょうどあなたのwhere句にNULLのために何かを追加:or

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

双方が=は常に偽で使用してNULL対比較するので、同時に真になることはありません。 @isActiveがNULLの場合、isActive列の値にかかわらずorはTrueで、Subscriptionになります。

+0

ありがとうございますが、サブスクリプションテーブルには、IsActiveの値が0と1の2つしかありません。 – APL

+2

はい、もちろんです。あなたはサブスクリプションテーブルのすべての行を返す方法を尋ねましたが、sprocへの最も単純な変更は@isActiveをNULLとして渡すことです。もしそうなら、カラム値が何であるか気にしないでください。 – cco

関連する問題