Multiple conditional Where clause

后端 未结 2 2000
执笔经年
执笔经年 2021-01-15 18:45

I currently have a query that will pull a bunch of information from my database based on whatever where condition that I want to use.

declare @C         


        
相关标签:
2条回答
  • 2021-01-15 19:20

    You might want to look into building your query.

    DECLARE @Number varchar(10)
    DECLARE @Where varchar(max)
    DECLARE @Query varchar(max)
    
    SET @Query = 'SELECT * FROM TestTable'
    SET @Where = ''
    
    SET @Number = '3'
    
    IF ISNULL(@Number, '') != ''
    BEGIN
        SET @Where = @Where + 'and testNumber = ' + @Number
    END
    
    IF LEN(@Where) > 0
    BEGIN
        SET @Where = SUBSTRING(@Where, 4, LEN(@Where))
    END
    
    if ISNULL(@Where, '') != ''
    BEGIN
        SET @Query = @Query + ' WHERE ' + @Where
    END
    
    EXEC(@Query)
    

    Check out this gentleman's article for reference: https://social.msdn.microsoft.com/forums/sqlserver/en-US/1ec6ffffd9-754b-4d78-8d3a-2b4da90e85dc/dynamically-building-where-clauses

    0 讨论(0)
  • 2021-01-15 19:25

    With help from the link that @Norman posted I figured it out. I wanted to post my solution for others to see.

    declare @CaseNum varchar(MAX),
            @ImportId varchar(MAX)
    
    
    set @CaseNum = ''
    set @ImportId = ''
    ----------------------------------------------------------------------------
    
    If(@CaseNum = '')    --Sets the parameter to NULL for COALESCE to work
    Begin
        Select @CaseNum = NULL
    End
    
    If(@ImportId = '')   --Sets the parameter to NULL for COALESCE to work
    Begin
        Select @ImportId = NULL
    End
    
    --------------------
       query in here
    --------------------
    
    where
        gr.[CaseNum] = COALESCE(@CaseNum, gr.[CaseNum])
        and im.ImportId = COALESCE(@ImportId, im.ImportId)
    

    This solution allows the query to use just a single parameter or all at the same time.

    0 讨论(0)
提交回复
热议问题