2015-10-18 86 views
3

你好,我是使用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正在执行批处理时发生错误。

所以任何人都可以帮我这个

回答

2

通过设计SQL服务器不允许在列类型,如nTextTextvarchar(max)nVarchar(max)任何索引。

这里您试图在列job_desc上创建一个唯一约束,这是NTEXT类型因此是错误。

现在你可能会问问sql服务器不允许任何索引,但你试图创建一个唯一的约束,事实上当我们创建一个列的唯一约束时,SQL Server在后台创建一个Unique non-Clustered索引来强制该列的唯一性。因此错误消息。

解决方案

更改列的东西,你可以创建索引像Varchar(8000)也许nVarchar(4000)类型。

或者选择备用列来创建索引。也许是Id列。

+0

这是更好/更快的全文索引或正常索引与查询: '选择job_desc从其中job_desc像%最好%' 例如:让它成为** sql server是最好的**如果我要搜索每个 **此列中的最佳**字 –

+0

您必须在表中的任何列上都有唯一键,而不一定要在要创建全文索引的列上,此键是由全文用于在表中进行查找。您可以在ID列上创建唯一索引,并将FT放在具有索引兼容数据类型的任何列上。 –

+0

我试过这个: 'GO CREATE UNIQUE INDEX jid ON [Post]([Id]); GO CREATE FULLTEXT CATALOG ftc AS DEFAULT; GO CREATE FULLTEXT INDEX ON [dbo]。[Post]([job_desc])KEY INDEX jid ON ftc WITH CHANGE_TRACKING AUTO ' –