如何在SQL的WHERE条件内定义IF子句?

时间:2019-05-27 02:01:03

标签: sql-server tsql stored-procedures

我正在尝试在SQL的where条件内的简单if语句。我不想要CASE语句,因为它很简单。

示例:

CREATE PROCEDURE [dbo].[usp_GetStatus]
    @siteId INT,


    ........
    FROM sites
    WHERE StartDate = @reportMonth
      AND..
      AND ...
      AND IF(@siteId > 0) sites.SiteId = @siteId 
    ........

我想像上面定义简单。

如果用户传递整数值,则我的siteId参数可以为0或更大。如果siteId参数为0,我想省略AND条件。

2 个答案:

答案 0 :(得分:3)

通常,您可以在SQL中使用布尔逻辑来处理此问题。所以你可以这样写:

viewModel.output.nextAction
        .subscribe(onNext: { [weak self] screen in
            self?.navigationController?.pushViewController(screen, animated: true) 
        }) // PROBLEM FACED: Pushing a UIAlertController
        .disposed(by: disposeBag)

因此,如果WHERE StartDate = @reportMonth AND.. AND ... AND (@siteId <=0 OR sites.SiteId = @siteId) 不大于0,它将忽略@siteId子句的其余部分,但是如果是,则它将评估您的OR子句。通常对于存储的proc,我会将默认值设置为null并检查是否为空:

sites.SiteId

答案 1 :(得分:1)

我宁愿建议

CREATE PROCEDURE [dbo].[usp_GetStatus]
    @siteId INT,


    ........
    FROM sites
    WHERE StartDate = @reportMonth
      AND..
      AND ...
      AND 
sites.SiteId = case when @siteId > 0 then @siteId else sites.SiteId end