我正在尝试在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条件。
答案 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