使用位参数创建multifuntional存储过程

时间:2017-03-11 21:20:58

标签: sql-server stored-procedures dapper

CREATE PROCEDURE [GetSubscriptions]
@id uniqueidentifier,
@isActive bit
AS
BEGIN
SELECT 
*
FROM SUBSCRIPTION
WHERE id=@id and IsActive= @isActive 
END
GO

我想以这种方式使用它 -

  1. 当@isActive = 1时,它将返回活动的订阅行。 - 工作
  2. 当@isActive = 0时,它将返回非活动订阅行。 - 工作
  3. 独立的IsActive Fiag,它将返回所有订阅行 - ?
  4. 订阅表只有两个IsActive值,即0和1。 什么是最好的短路方式,以便适用于所有这三个条件?提前感谢: - )

1 个答案:

答案 0 :(得分:1)

@isActive可以有三种状态:0,1或NULL 只需在where子句中添加NULL的内容:

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

or的双方可能永远不会同时为真,因为使用NULL=进行比较始终为假。如果@isActive为NULL,则or为True,无论isActiveSubscription列的值如何。