Sql 根据输入删除where子句的一部分

Sql 根据输入删除where子句的一部分,sql,sql-server,select,Sql,Sql Server,Select,在下面的查询中,如果@searchBy的输入为1,我想省略由@searchBy=@searchBy创建的过滤器。我该怎么做 CREATE PROC [dbo].[RptCashCollectionInner] @branchId int, @searchBy int, @paidDate datetime AS BEGIN SELECT Id FROM reading WHERE created_by = @searchBy A

在下面的查询中,如果@searchBy的输入为1,我想省略由@searchBy=@searchBy创建的过滤器。我该怎么做

CREATE PROC [dbo].[RptCashCollectionInner]
    @branchId int, 
    @searchBy int, 
    @paidDate datetime 
AS
BEGIN
    SELECT Id
    FROM reading
    WHERE created_by = @searchBy 
      AND branch_id = @branchId
END;

您可以使用or运算符短接“按元素搜索”:

CREATE PROC [dbo].[RptCashCollectionInner]
  @branchId int, @searchBy int, @paidDate datetime AS
BEGIN
  select Id, from reading
  where (@searchBy = 1 or created_by=@searchBy) and branch_id=@branchId
END;
CREATE PROC [dbo].[RptCashCollectionInner]
  @branchId int, @searchBy int, @paidDate datetime AS
BEGIN
  select Id, from reading
  where @searchBy in (1, created_by) and branch_id=@branchId
END;
或者更优雅地使用in运算符:

CREATE PROC [dbo].[RptCashCollectionInner]
  @branchId int, @searchBy int, @paidDate datetime AS
BEGIN
  select Id, from reading
  where (@searchBy = 1 or created_by=@searchBy) and branch_id=@branchId
END;
CREATE PROC [dbo].[RptCashCollectionInner]
  @branchId int, @searchBy int, @paidDate datetime AS
BEGIN
  select Id, from reading
  where @searchBy in (1, created_by) and branch_id=@branchId
END;

您可以使用or运算符短接“按元素搜索”:

CREATE PROC [dbo].[RptCashCollectionInner]
  @branchId int, @searchBy int, @paidDate datetime AS
BEGIN
  select Id, from reading
  where (@searchBy = 1 or created_by=@searchBy) and branch_id=@branchId
END;
CREATE PROC [dbo].[RptCashCollectionInner]
  @branchId int, @searchBy int, @paidDate datetime AS
BEGIN
  select Id, from reading
  where @searchBy in (1, created_by) and branch_id=@branchId
END;
或者更优雅地使用in运算符:

CREATE PROC [dbo].[RptCashCollectionInner]
  @branchId int, @searchBy int, @paidDate datetime AS
BEGIN
  select Id, from reading
  where (@searchBy = 1 or created_by=@searchBy) and branch_id=@branchId
END;
CREATE PROC [dbo].[RptCashCollectionInner]
  @branchId int, @searchBy int, @paidDate datetime AS
BEGIN
  select Id, from reading
  where @searchBy in (1, created_by) and branch_id=@branchId
END;
我真的很喜欢带IN运算符的那个。我真的很喜欢带IN运算符的那个。