我目前有一个查询,它会根据我想要使用的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 + '%'
答案 0 :(得分:2)
在@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)
此解决方案允许查询仅使用单个参数或同时使用所有参数。
答案 1 :(得分: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)