小编典典

多条件Where子句

sql

我目前有一个查询,它将根据where我想使用的任何条件从数据库中提取一堆信息。

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

如果参数=’‘,我希望能够删除注释部分并仅显示所有行

例如,如果我使用set @CaseNum = '1234567'它,它将按该参数搜索,如果我使用@FormatId = '12'它,将按该参数搜索。

我已经尝试使用以下方法和其他一些尝试,但是进展并不很快。

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

阅读 183

收藏
2021-04-07

共1个答案

小编典典

您可能需要考虑构建查询。

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)
2021-04-07