SQL Server:如果参数不为null且有一个条件为false,则选择all

SQL Server:如果参数不为null且有一个条件为false,则选择all,sql,sql-server,tsql,Sql,Sql Server,Tsql,我试图用下面的代码获取数据,其场景如下 当@status=0且日期不为空时,则获取筛选数据 当@status=1且日期不为空时,选择所有数据 当@status=1且日期为空时,选择所有数据 declare @status int = 0, @date datetime = '2018-12-01 09:48:34.343' select CreatedTime from AspNetUsers where @date is null or (@status = 1

我试图用下面的代码获取数据,其场景如下

  • 当@status=0且日期不为空时,则获取筛选数据

  • 当@status=1且日期不为空时,选择所有数据

  • 当@status=1且日期为空时,选择所有数据

    declare @status int = 0,
            @date datetime = '2018-12-01 09:48:34.343'
    
    select CreatedTime 
    from AspNetUsers 
    where @date is null 
       or (@status = 1 and CreatedTime > '2018-12-01 09:48:34.343')
    

  • 您描述的逻辑由以下人员处理:

    where (@status = 0 and CreatedTime > @date) or
          (@status = 1) 
    

    不清楚为什么您有两个不同的变量。

    您描述的逻辑由以下人员处理:

    where (@status = 0 and CreatedTime > @date) or
          (@status = 1) 
    
    DECLARE @status INT = 0,
            @date DATETIME = '2018-12-01 09:48:34.343'
    
    
    DECLARE @RQuery NVARCHAR(MAX)
    
    SET @RQuery = ' WHERE 1 = 1 '
    
    IF @status = 0 AND @date IS NOT NULL
    BEGIN
        SET @RQuery =  @status + ' = 0 AND  CreatedTime ' + CAST(@date AS DATE)
    END
    ELSE IF @status = 1 AND @date IS NOT NULL
    BEGIN
        SET @RQuery =  ''
    END
    ELSE IF @status = 1 AND @date IS  NULL
    BEGIN
        SET @RQuery =  ''
    END
    
    DECLARE @RQueryFULL NVARCHAR(MAX)
    SET @RQueryFULL = ''
    
    SET @RQueryFULL = 'SELECT CreatedTime 
    FROM AspNetUsers ' + @RQuery
    
    EXEC @RQueryFULL
    Try This
    

    不清楚为什么有两个不同的变量。

    样本数据和期望的结果确实会有帮助。是的。请包括预期结果……cenario 2和3是否相同?您只能检查状态变量。如果使用2个查询作为变量状态,则不属于表中。您可以使用“IF”的语句来执行此操作:IF(@status=1)从AsNetUsers中选择*。如果(@status=0),请从AspNetUsers中选择*。我读对了吗?当
    @status=0且date为null时该怎么办?样本数据和期望的结果将非常有用。是的。请包括预期结果……cenario 2和3是否相同?您只能检查状态变量。如果使用2个查询作为变量状态,则不属于表中。您可以使用“IF”的语句来执行此操作:IF(@status=1)从AsNetUsers中选择*。如果(@status=0),请从AspNetUsers中选择*。我读对了吗?如果
    @status=0,date为null,该怎么办?
    
    DECLARE @status INT = 0,
            @date DATETIME = '2018-12-01 09:48:34.343'
    
    
    DECLARE @RQuery NVARCHAR(MAX)
    
    SET @RQuery = ' WHERE 1 = 1 '
    
    IF @status = 0 AND @date IS NOT NULL
    BEGIN
        SET @RQuery =  @status + ' = 0 AND  CreatedTime ' + CAST(@date AS DATE)
    END
    ELSE IF @status = 1 AND @date IS NOT NULL
    BEGIN
        SET @RQuery =  ''
    END
    ELSE IF @status = 1 AND @date IS  NULL
    BEGIN
        SET @RQuery =  ''
    END
    
    DECLARE @RQueryFULL NVARCHAR(MAX)
    SET @RQueryFULL = ''
    
    SET @RQueryFULL = 'SELECT CreatedTime 
    FROM AspNetUsers ' + @RQuery
    
    EXEC @RQueryFULL
    Try This