【问题标题】:SQL Server: use CONTAINS in where of CTESQL Server:在 CTE 的位置使用 CONTAINS
【发布时间】:2018-08-28 11:03:07
【问题描述】:

我有一个常规的Select 语句,我使用CONTAINS 方法。它在我为表定义全文索引后工作。

现在我需要在包含此表的 CTE 中使用相同的东西,但我仍然收到需要配置的全文索引的错误。

不能对列 'column' 使用 CONTAINS 或 FREETEXT 谓词,因为它不是全文索引。

如何使用 CTE 即时执行此操作?

我能够为表定义全文索引的唯一方法是使用 ssms 选项而不是 T-SQL 命令

【问题讨论】:

  • @PeterB 你能解释一下吗?
  • 请显示有效的查询,无效的 CTE,以及索引的定义。
  • 问题不在于 CTE,而在于您尝试应用 CONTAINS 函数的列。它没有全文索引(索引适用于列,而不是整个表)。

标签: sql-server sql-server-2008 common-table-expression contains sql-server-2016


【解决方案1】:

一种可能的解决方法是在 T-SQL 命令中创建一个临时表,然后在该表上创建全文索引。

基本上替换:

WITH CTE
AS
(
    <select statement>
)

到:

<select clause>
INTO #TempTable
<from clause>

您现在可以在#TempTable 上创建全文索引,然后在您的 T-SQL 脚本中使用它。该表的范围仅限于 T-SQL 脚本,因此您不必担心删除它(当然,除非存在内存限制)。这是quick reference 用于SQL Server 中的临时表,由于某种原因无法找到官方文档。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-01
    相关资源
    最近更新 更多