繁体   English   中英

多条件Where子句

[英]Multiple conditional Where clause

我现在有一个查询,将基于什么拉了一堆的信息从我的数据库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 + '%'

在@Norman发布的链接的帮助下,我发现了它。 我想发布我的解决方案给别人看。

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)

此解决方案允许查询仅使用单个参数或同时使用所有参数。

您可能希望研究构建查询。

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)

看看这位绅士的文章以供参考: https//social.msdn.microsoft.com/forums/sqlserver/en-US/1ec6ddd9-754b-4d78-8d3a-2b4da90e85dc/dynamically-building-where-clauses

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM