sql - 在 View 上创建全文索引时出现问题

标签 sql sql-server tsql sql-server-2012 full-text-indexing

我有一个像这样创建的 View :

CREATE VIEW [dbo].[vwData] WITH SCHEMABINDING
AS
    SELECT  [DataField1] ,
            [DataField2] ,
            [DataField3]
    FROM    dbo.tblData

当我尝试在其上创建全文索引时,如下所示:

CREATE FULLTEXT INDEX ON [dbo].[vwData](
[DataField] LANGUAGE [English])
KEY INDEX [idx_DataField]ON ([ft_cat_Server], FILEGROUP [PRIMARY])
WITH (CHANGE_TRACKING = AUTO, STOPLIST = SYSTEM)

我收到此错误:

View 'dbo.vwData' is not an indexed view. 
Full-text index is not allowed to be created on it.

知道为什么吗?

最佳答案

首先,您需要在 View 上创建唯一的聚集索引,然后再创建全文索引。

假设你有一张 table :

CREATE TABLE [dbo].[tblData](
    [DataField1] [Varchar] NOT NULL,
    [DataField2] [varchar](10) NULL,
    [DataField3] [varchar](10) NULL
    )

正如您已经所做的那样,您有一个 View :

CREATE VIEW [dbo].[vwData] 
WITH SCHEMABINDING
AS
    SELECT  [DataField1] ,
            [DataField2] ,
            [DataField3]
    FROM    dbo.tblData
GO

现在您需要在 View 上创建唯一的聚集索引:

CREATE UNIQUE CLUSTERED INDEX idx_DataField
    ON [dbo].[vwData] (DataField1);
GO

由于您已有全文目录ft_cat_Server,创建唯一键后,您可以创建全文索引:

CREATE FULLTEXT INDEX ON [dbo].[vwData](
[DataField1] LANGUAGE [English])
KEY INDEX [idx_DataField]ON ([ft_cat_Server], FILEGROUP [PRIMARY])
WITH (CHANGE_TRACKING = AUTO, STOPLIST = SYSTEM)

希望这有帮助:)

关于sql - 在 View 上创建全文索引时出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18945624/

相关文章:

mysql - SSIS从A表中获取B表中没有的所有数据并将其插入到B表中

sql - 使用逗号分隔值的 MS SQL 更新语句

sql-server - Transact SQL 跳过 GOTO 或 IF ELSE 当链接服务器在代码中时

sql - SQL 2008 中的临时表和表变量有什么区别?

sql - Postgres : How to search for a value on _all_ fields in an object in a json-type column without knowing the keys

sql-server - TSQL 按问题分组

sql-server - Azure SQL Server 无法创建数据库

php - 关闭并重新打开后继续填写 HTML 表单

sql - Oracle 10g 中的 CTE - "unsupported column aliasing"

java - 选择文件路径字符串返回空 N1QL 查询