Múltiple condicional cláusula Where

Actualmente tengo una consulta que extraerá un montón de información de mi database en function de la condición en que quiera usar.

 declare @CaseNum char(7), @ImportId char, @FormatId char, @SessionId char(5) set @CaseNum = '' --I can place the value that I want to search by in here set @ImportId = '' set @FormatId = '' set @SessionId = '' -------------------- query in here -------------------- where gr.[CaseNum] = @CaseNum --currently I have to comment the ones I'm not using out --im.[ImportId] = @ImportId --fr.[FormatId] = @FormatId --se.[SessionId] = @SessionId 

Quiero poder sacar la porción de comentarios y simplemente mostrar todas las filas si el parámetro = ''

Por ejemplo, si uso set @CaseNum = '1234567' , searchá ese parámetro y si utilizo @FormatId = '12' searchá por ese.

He intentado usar el siguiente y algunos otros bashs pero no estoy llegando a ninguna parte rápidamente.

 where gr.[CaseNum] = '%' + @CaseNum + '%' and im.[ImportId] = '%' + @ImportId + '%' and fr.[FormatId] = '%' + @FormatId + '%' and se.[SessionId] = '%' + @SessionId + '%' 

Es posible que desee estudiar la construcción de su consulta.

 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) 

Eche un vistazo al artículo de este caballero para reference: https://social.msdn.microsoft.com/forums/sqlserver/en-US/1ec6ddd9-754b-4d78-8d3a-2b4da90e85dc/dynamically-building-where-lambres

Con la ayuda del enlace que @Norman publicó, lo descubrí. Quería publicar mi solución para que otros puedan verla.

 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) 

Esta solución permite que la consulta use solo un parámetro o todos al mismo time.