SQL несколько где - PullRequest
       7

SQL несколько где

0 голосов
/ 07 января 2020

У меня есть процедура, в которой есть опции для получения идентификаторов из трех разных столбцов. Я объединяю все предложения where вместе, а затем EXEC команду.

Просто хотел посмотреть, есть ли лучший способ сделать это?

IF ((ISNULL(@GuidelineIds, '')) <> '') 
BEGIN
    SET @whereClause = @whereClause + ' AND glinks.GuidelineId IN (SELECT val AS linkType FROM dbo.Split(''' + @GuidelineIds + ''','',''))'
END

IF ((ISNULL(@SubCategories, '')) <> '') 
BEGIN
    SET @whereClause = @whereClause + ' AND lt.LinkTypeID IN (SELECT val As subCategories FROM dbo.Split(''' + @SubCategories + ''', '',''))'
END

IF ((ISNULL(@LanguageIds, '')) <> '') 
BEGIN
    SET @whereClause = @whereClause + ' AND glinks.LanguageId IN (SELECT val As languages FROM dbo.Split(''' + @LanguageIds + ''', '',''))'
END

1 Ответ

0 голосов
/ 08 января 2020

Вы можете достичь этого таким образом

Select *
From ...
WHERE 1 = 1 
    AND ((ISNULL(@GuidelineIds, '')) = '' OR glinks.GuidelineId IN (SELECT val AS linkType FROM dbo.Split(''' + @GuidelineIds + ''','','')))
    AND ((ISNULL(@SubCategories, '')) = '' OR lt.LinkTypeID IN (SELECT val As subCategories FROM dbo.Split(''' + @SubCategories + ''', '','')))
    AND ((ISNULL(@LanguageIds, '')) = '' OR glinks.LanguageId IN (SELECT val As languages FROM dbo.Split(''' + @LanguageIds + ''', '',''))) 
...