Multiple conditional Where clause

左心房为你撑大大i 提交于 2019-12-01 13:27:53

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/1ec6ddd9-754b-4d78-8d3a-2b4da90e85dc/dynamically-building-where-clauses

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.

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!