如何在列上创建没有错误的全文索引

时间:2015-10-18 20:24:44

标签: mysql sql sql-server

您好我正在使用Visual Studio 2015构建数据库 但是有一些错误会打断我的工作

这是我的表格查询:

CREATE TABLE [dbo].[Post] (
    [Id]            INT        NOT NULL,
    [job_desc]  NTEXT       NOT NULL,
    [UID]           INT        NOT NULL,
    [TheWork]       NVARCHAR(50)        NOT NULL,
    [Photo_Of_Work_1] NCHAR (50) DEFAULT ('W_No_Pho') NULL,
    [Photo_Of_Work_2] NCHAR (50) DEFAULT ('W_No_Pho') NULL,
    [Photo_Of_Work_3] NCHAR (50) DEFAULT ('W_No_Pho') NULL,

    [DT]            DATETIME   NOT NULL,
    [Salary] MONEY NULL, 
    PRIMARY KEY CLUSTERED ([Id] ASC),
    CONSTRAINT [FK_Post_ToPerson] FOREIGN KEY ([UID]) REFERENCES [dbo].[Person] ([Id])
);

所以我有job_desc列,其类型为ntext所以我不能使用普通索引,所以我必须使用full-text-index

我在这里有这段代码:

 GO
    CREATE UNIQUE INDEX jdui  ON [Post] ([job_desc]);
    GO
    CREATE FULLTEXT CATALOG ftc AS DEFAULT;
    GO
    CREATE FULLTEXT INDEX ON [dbo].[Post] ([Job_Desc]) KEY INDEX jdui ON ftc WITH CHANGE_TRACKING AUTO

但我真的不知道为什么每次更新都会出现错误, 这是错误语法:

  

消息SQL00000创建[dbo]。[发布]。[jdui] ...错误SQL72014 .Net   SqlClient数据提供程序:消息1919,级别16,状态1,行1列   表'dbo.Post'中的'job_desc'属于无效的类型   索引中的键列。 SQL72045脚本执行错误。该   执行脚本:CREATE UNIQUE NONCLUSTERED INDEX [jdui]       ON [dbo]。[Post]([job_desc] ASC);

     

消息SQL00000正在执行批处理时发生错误。

所以任何人都可以帮助我

1 个答案:

答案 0 :(得分:2)

按设计,SQL Server不允许列类型上的任何索引,例如nTextTextvarchar(max)nVarchar(max)

在这里,您尝试在job_descNTEXT上创建一个唯一约束,因此出现错误。

现在你可能会问,sql server不允许任何索引,但是你正在尝试创建一个唯一约束,事实上当我们在列上创建一个唯一约束时,SQL Server会在后台创建一个{{ 1}}索引以强制该列的唯一性。因此错误消息。

<强>解决方案

将列的类型更改为可以在Unique non-ClusteredVarchar(8000)上创建索引的内容。

或选择备用列以创建索引。可能是nVarchar(4000)列。