2010-02-21 4 views
16

मेरे पास प्राथमिक कॉलम के साथ डेटाबेस तालिका है:मैं इस एसक्यूएल सर्वर पूर्ण पाठ अनुक्रमणिका क्यों नहीं बना सकता?

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 

मुझे यह त्रुटि मिलती है:

'आईडी' पूर्ण-पाठ खोज कुंजी को लागू करने के लिए मान्य अनुक्रमणिका नहीं है। एक पूर्ण-पाठ खोज कुंजी एक अद्वितीय, गैर-शून्य, सिंगल-कॉलम इंडेक्स होना चाहिए जो ऑफ़लाइन नहीं है, गैर-निर्धारिती या अपर्याप्त गैर-प्रभावित कंप्यूटेड कॉलम पर परिभाषित नहीं किया गया है, इसमें फ़िल्टर नहीं है, और इसका अधिकतम आकार 900 है बाइट्स। पूर्ण-पाठ कुंजी के लिए एक और अनुक्रमणिका चुनें।

मैं गलत क्या कर रहा हूं?

उत्तर

27

कुंजी इंडेक्स के बाद, आपको इंडेक्स का नाम कॉलम नहीं निर्दिष्ट करना होगा। कॉलम आईडी पर इंडेक्स का नाम ढूंढने के लिए, sp_help DomainName टाइप करें और उस तालिका पर इंडेक्स की एक सूची होगी। पीके को पीके_xxxxएक्स जैसे कुछ नाम दिया जाएगा। "आईडी" के बजाय उस इंडेक्स नाम का प्रयोग करें।

+1

धन्यवाद मैं कॉलम नाम का उपयोग करने की कोशिश कर रहा था: डी – MonsterMMORPG

+0

http://technet.microsoft.com/en-us/library/ms187317.aspx "कुंजी INDEX index_name - table_name पर ** अद्वितीय कुंजी अनुक्रमणिका ** का नाम है। " –

+0

सही दिशा में मुझे इंगित करने के लिए धन्यवाद! ** एसएसएमएस ** में यदि आप अपनी तालिका पर '+' खोलते हैं और 'कुंजी' पर जाते हैं तो 'पीके_' से शुरू होने वाले सोने का हाइलाइट नाम आपकी प्राथमिक कुंजी है। फिर से धन्यवाद! – Termato

4

कॉलम नाम निर्दिष्ट करने के बजाय, अनुक्रमणिका का नाम निर्दिष्ट करें। आप की तरह प्राथमिक कुंजी सूचकांक के नाम पा सकते हैं:

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 

बयान की पहली पंक्ति में शामिल हैं:

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

तो आप की तरह एक प्रतिलिपि प्राप्त सूचकांक बना सकते हैं ऑन क्लॉज, जो तालिका का नाम निर्दिष्ट करता है (इस मामले में, उत्पाद डॉक्स)। कथन की अगली पंक्ति कॉलम की एक सूची है जिसे अनुक्रमित किया जाना चाहिए (डॉकसमरी और डॉककंटेंट)।

पिछले उदाहरण में CREATE FULLTEXT INDEX कथन की अगली पंक्ति कुंजी इंडेक्स क्लॉज है। यह अद्वितीय कुंजी अनुक्रमणिका का नाम है (इस मामले में, PK_ProductDocs_DocID) जिसे ProductDocs तालिका पर परिभाषित किया गया है। अपनी पूर्ण-पाठ अनुक्रमणिका को परिभाषित करते समय, इंडेक्स नाम निर्दिष्ट करें, न कि कॉलम नाम।

पूर्ण टेक्स्ट इंडेक्स परिभाषा में कुंजी इंडेक्स क्लॉज के बाद ऑन क्लॉज है, जो पूर्ण-पाठ कैटलॉग (ProductFTS) का नाम निर्दिष्ट करता है जो इंडेक्स में शामिल होगा। SQL सर्वर 2008 में, आप एक फ़ाइल समूह भी निर्दिष्ट कर सकते हैं जहां अनुक्रमणिका संग्रहीत की जाएगी। हालांकि, यह विकल्प SQL सर्वर 2005 में उपलब्ध नहीं है क्योंकि फ़ाइल समूह एसोसिएशन कैटलॉग स्तर पर है।

उदाहरण में अंतिम खंड FULLTEXT INDEX कथन बनाएं STOPLIST के साथ है। यह विकल्प, केवल SQL Server 2008 में उपलब्ध है, आपको स्टॉपलिस्ट का नाम निर्दिष्ट करने देता है जिसका उपयोग इस अनुक्रमणिका के लिए किया जाएगा। इस मामले में, सिस्टम स्टॉपलिस्ट का उपयोग किया जाता है, लेकिन आप इसके बजाय उपयोगकर्ता द्वारा परिभाषित स्टॉपलिस्ट निर्दिष्ट कर सकते हैं। (स्टॉपलिस्ट को बाद में लेख में अधिक विस्तार से कवर किया गया है।)

संबंधित मुद्दे