2010-02-21 26 views
16

我與主列數據庫表定義爲:爲什麼我無法創建此sql服務器全文索引?

ID bigint identity primary key 

我也有一個文本列MiddlePart。我試圖創建一個全文索引,就像這樣:

CREATE FULLTEXT INDEX ON domaining.dbo.DomainName 
(
    MiddlePart 
    Language 0X0 
) 
KEY INDEX ID ON domaincatalog 
WITH CHANGE_TRACKING AUTO 

我得到這個錯誤:

「ID」不是強制執行全文搜索鍵的有效索引。全文搜索鍵必須是唯一的,不可空的單列索引,該索引不脫機,未在非確定性或不精確的非計算列上定義,沒有過濾器,最大大小爲900字節。爲全文密鑰選擇另一個索引。

我在做什麼錯?

回答

27

在KEY INDEX之後,您需要指定索引的名稱而不是列。要在列ID中找到索引的名稱,請鍵入sp_help DomainName,並且該表上會有一個索引列表。 PK將被命名爲PK_xxxxx。使用該索引名稱而不是「ID」。

+1

謝謝我試圖使用列名:d – MonsterMMORPG 2012-02-21 21:36:21

+0

http://technet.microsoft.com/en-us/library/ms187317.aspx「KEY INDEX index_name - 是table_name上**唯一鍵索引**的名稱。「 – 2013-09-20 18:38:50

+0

謝謝你指點我在正確的方向! IN ** SSMS **如果您打開桌面上的「+」並轉到「Keys」,以「PK_」開頭的黃金突出顯示名稱就是您的主鍵。再次謝謝你! – Termato 2014-12-10 19:29:12

4

而不是指定列名稱,指定索引的名稱。你可以找到類似的主鍵索引的名稱:

select name from sysindexes where object_id('DomainName') = id 

然後你就可以創建這樣一個全文索引:

CREATE FULLTEXT INDEX ON DomainName 
(
    MiddlePart 
    Language 0X0 
) 
KEY INDEX PK__DomainName__40E497F3 ON domaincatalog 
WITH CHANGE_TRACKING AUTO 
1

https://www.simple-talk.com/sql/learn-sql-server/understanding-full-text-indexing-in-sql-server/

CREATE TABLE ProductDocs (
    DocID INT NOT NULL IDENTITY, 
    DocTitle NVARCHAR(50) NOT NULL, 
    DocFilename NVARCHAR(400) NOT NULL, 
    FileExtension NVARCHAR(8) NOT NULL, 

     DocSummary NVARCHAR(MAX) NULL, 
     DocContent VARBINARY(MAX) NULL, 
     CONSTRAINT [PK_ProductDocs_DocID] PRIMARY KEY CLUSTERED (DocID ASC) 
    ) 
CREATE FULLTEXT INDEX ON ProductDocs 
(DocSummary, DocContent TYPE COLUMN FileExtension LANGUAGE 1033) 
KEY INDEX PK_ProductDocs_DocID 
ON ProductFTS 
WITH STOPLIST = SYSTEM 

語句的第一行包含ON子句,它指定表名(在本例中爲ProductDocs)。該語句的下一行是應該編制索引的列表(DocSummary和DocContent)。

上例中CREATE FULLTEXT INDEX語句的下一行是KEY INDEX子句。這是在ProductDocs表上定義的唯一鍵索引的名稱(在本例中爲PK_ProductDocs_DocID)。在定義全文索引時,請務必指定索引名稱,而不是列名稱。

在全文索引定義中的KEY INDEX子句之後是ON子句,它指定索引將加入的全文目錄(ProductFTS)的名稱。在SQL Server 2008中,您還可以指定存儲索引的文件組。但是,此選項在SQL Server 2005中不可用,因爲文件組關聯處於目錄級別。

示例CREATE FULLTEXT INDEX語句中的最後一個子句是WITH STOPLIST。此選項僅在SQL Server 2008中可用,您可以指定將用於此索引的停止列表的名稱。在這種情況下,使用系統停止列表,但您可以改爲指定用戶定義的停止列表。 (文章後面將更詳細地介紹Stoplists。)

相關問題