If statement SQL Server:if else On AND子句

If statement SQL Server:if else On AND子句,if-statement,sql-server-2012,If Statement,Sql Server 2012,我正在使用SQL Server,我遇到了需要根据if条件运行第一个and子句或第二个and子句的情况 请看下面的查询,我试图解释我的要求。我想在下面的查询中运行,但在where子句中我有2个和条件,其中一个需要基于@toRun变量运行,如下所示 如果@toRun等于“first”,则应运行1st和条件 否则将运行第二个和第二个条件。 有人能帮我怎么做吗?我试过if和case,但找不到方法 declare @toRun nvarchar(10) = 'first'; select * From

我正在使用SQL Server,我遇到了需要根据if条件运行第一个and子句或第二个and子句的情况

请看下面的查询,我试图解释我的要求。我想在下面的查询中运行,但在where子句中我有2个和条件,其中一个需要基于@toRun变量运行,如下所示

如果@toRun等于“first”,则应运行1st和条件 否则将运行第二个和第二个条件。 有人能帮我怎么做吗?我试过if和case,但找不到方法

declare @toRun nvarchar(10) = 'first';
select * 
From tbl_data
where isDeleted=0

--if @toRun is equal to 'first' then following clause should run
--1st Clause:
AND FID in (select FID from t1)

--if toRun is not equal to 'first' then following clause should run
--2nd Clause:
AND TID in (select TID from t1)

尝试这样做:添加这两个条件,但使用OR子句和一些额外的括号可以帮助您运行其中一个条件

declare @toRun nvarchar(10) = 'first';
select * 
From tbl_data
where 
    isDeleted=0 AND
      (
        (@toRun = 'first' AND FID IN (SELECT FID FROM T1)) OR 
        (@ToRun != 'first' AND TID IN (SELECT TID FROM T1))
      )
如果将来确实需要使用If语句来执行某些操作,在本例中,我认为没有必要这样做,那么您的语法如下所示:

declare @toRun nvarchar(10) = 'first';


IF @toRun = 'first'
  BEGIN 
    select * 
    From tbl_data
    where 
        isDeleted=0 AND
        FID IN (SELECT FID FROM T1)
  END

IF @toRun != 'first'
  BEGIN 
    select * 
    From tbl_data
    where 
        isDeleted=0 AND
        TID IN (SELECT TID FROM T1)
  END

这是使用EXISTS的另一种方法


很酷的第一个例子真的是帮助充分感谢,但我不同意第二个例子,但是它在技术上是正确的,但它会使代码复制我不想做。高兴它帮助,@ OMLANEES -如果这个或任何答案已经解决了你的问题,请考虑点击检查标记。这向更广泛的社区表明,你已经找到了一个解决方案,并给回答者和你自己带来了一些声誉。我完全同意第二个选项不是我自己会使用的方法,但是我编辑了我的原始答案并将其包括在内,以便您可以比较语法以供将来参考。
DECLARE @ToRun nvarchar(10) = 'first';

SELECT *  
FROM tbl_data t
WHERE isDeleted = 0 AND 
      EXISTS (SELECT 1 FROM t1 
              WHERE (@ToRun = 'first' AND t.FID = t1.FID) OR 
                    (@ToRun <> 'first' AND t.TID = t1.TID)
             )