代码之家  ›  专栏  ›  技术社区  ›  ScottE

MS-SQL 2005搜索:带自由文本的条件where子句

  •  1
  • ScottE  · 技术社区  · 15 年前

    我打算使用视图并编写动态sql来查询视图,但我需要使用全文索引,并且我的视图需要外部联接( MS-SQL 2005 full-text index on a view with outer joins

    现在,我回到一个存储过程。

    我需要搜索(所有可选):

    • 使用全文索引(或无搜索词)的常规搜索查询
    • 单个标记(或无)

    有没有办法在WHERE子句中实现条件自由文本?查询可能是空的,在这种情况下,我想忽略它,或者只返回所有FTI匹配。

    ... AND FREETEXT(dbo.MediaLibraryCultures.*, '"* "')

    我是否最好将类别/标记筛选结果插入临时表/表变量,然后加入FTI搜索结果?这样,我只能在提供搜索词的情况下进行连接。

    思想?

    4 回复  |  直到 7 年前
        1
  •  1
  •   jpc    14 年前

    我知道这是一年后的事了,是SQL的更新版本,但仅供参考。。。

    我正在使用SQL Server 2008,并尝试使用

    AND ( @searchText = '' OR freetext(Name, @searchText))
    

    当设置@searchText=''时,我收到消息“Null或空全文谓词”。我想2008年发生了一些变化,在这种情况下短路无法正常工作。

        2
  •  0
  •   Tetraneutron    15 年前

    您可以为空搜索字符串添加一个检查,如

    where ...
    AND (FREETEXT(dbo.MediaLibraryCultures.*, @FreeTextSearchFor) OR @FreeTextSearchFor = '')
    

    (我有一种感觉,freetext搜索不能将null传递给它们,所以我将其与空字符串进行比较)

        3
  •  0
  •   ScottE    15 年前

    嗯,我以为sql server中没有短路?

    AND (@q = '' OR FREETEXT(dbo.MediaLibraryCultures.*, @q))
    

    奇怪的是,全文扫描仍然是执行计划的一部分。

        4
  •  0
  •   l33t    9 年前

    不适用于 SQL Server 2014 FREETEXT 表示我找到的唯一解决方案是:

    IF ISNULL(@Text, N'') = N'' SET @Text = N'""'
    
    SELECT ...
       WHERE ...
       AND (@Text = '""' OR FREETEXT([Data], @Text)