【问题标题】:Multiple conditions for CONTAINS statement on a full-text indexed result set全文索引结果集上的 CONTAINS 语句的多个条件
【发布时间】:2014-03-24 21:12:37
【问题描述】:

我们有一个存储过程,它接受一些参数,但这些参数中只有一个有值,用于过滤结果集。 SELECT 语句本身包含多个连接并且有点长。

为了避免多次复制粘贴查询,我希望能够在WHERE 子句中使用IFCASE 语句。问题是,我们使用的是全文索引和CONTAINS 语句,我不太确定如何在CONTAINS 子句内部/外部注入IFCASE 语句,如下所示:

SELECT * FROM [QUERY]
WHERE( 
   IF @Filter1 IS NOT NULL
   BEGIN
    CONTAINS(SomeColumn, @Filter1)
   END
   ELSE IF @Filter2 IS NOT NULL
   BEGIN
    CONTAINS(AnotherColumn, @Filter2)
   END)

这显然行不通。我不能将SELECT 查询放在视图或函数中,因为结果集当前没有指定唯一索引键,即不能被全文索引(现在表是单独的全文索引来解决这个问题问题)。

那么有没有办法做到这一点?我可能会将长 SELECT 查询复制到每个过滤器的不同 IF 语句中,但这会变得非常难看。任何帮助表示赞赏。

【问题讨论】:

    标签: sql sql-server full-text-search full-text-indexing


    【解决方案1】:

    也许我忽略了一些东西,但你不能按如下方式构造 WHERE...

    WHERE ((@Filter1 IS NOT NULL) AND CONTAINS(..)) OR ((@Filter2 IS NOT NULL) AND CONTAINS(..))

    对于类似的场景,我们就是这样做的。

    【讨论】:

    • 嗯。不完全是我想要的,但给了我一个想法。给我的朋友点个赞。
    猜你喜欢
    • 1970-01-01
    • 2019-06-12
    • 2021-05-14
    • 2013-06-23
    • 1970-01-01
    • 1970-01-01
    • 2014-02-12
    • 2018-08-30
    • 2012-01-27
    相关资源
    最近更新 更多