การสร้างดัชนีแบบกลุ่มล้มเหลวในการสร้างตาราง


10

เราพบข้อผิดพลาดเมื่อเรียกใช้สคริปต์ต่อไปนี้

IF NOT EXISTS (SELECT * FROM INFORMATION_SCHEMA.TABLES 
  WHERE TABLE_TYPE='BASE TABLE' AND TABLE_NAME='Table_Name')
BEGIN
CREATE TABLE Table_Name
(
    Field_Name_1 binary(32) NOT NULL CONSTRAINT PK_Name_Goes_Here PRIMARY KEY NONCLUSTERED
    , Field_Name_2 int NOT NULL 
    , Field_Name_3 datetime NOT NULL INDEX IX_Name_Goes_Here CLUSTERED
)
END 

โดยเฉพาะอย่างยิ่งมันคือการสร้างดัชนีคลัสเตอร์ที่แสดงข้อผิดพลาดต่อไปนี้:

ข่าวสารเกี่ยวกับ 1018, ระดับ 15, สถานะ 1, บรรทัดที่ 15
ไวยากรณ์ไม่ถูกต้องใกล้กับ 'INDEX' หากสิ่งนี้มีวัตถุประสงค์เพื่อเป็นส่วนหนึ่งของคำใบ้ของตารางตอนนี้จำเป็นต้องใช้คำหลัก A และวงเล็บ ดู SQL Server Books Online สำหรับไวยากรณ์ที่เหมาะสม

สิ่งนี้แปลกเพราะใช้งานได้บนเซิร์ฟเวอร์ทั้งหมดของเรายกเว้นเซิร์ฟเวอร์ QA เฉพาะ การแก้ไขที่เราวางไว้คือการสร้างดัชนีคลัสเตอร์นอกคำสั่งการสร้างตาราง แต่ฉันสนใจถ้าใครเคยเจอปัญหานี้มาก่อนหรือไม่

คำตอบ:


11

ไวยากรณ์สำหรับการประกาศดัชนีอินไลน์ถูกบันทึกอยู่ใน SQL Server 2014 แต่ที่มีที่ เป็นอย่างชัดเจนในอย่างเป็นทางการCREATE TABLEเอกสาร หลังจากพูดคุยกับเจ้าของเอกสารหัวข้อนั้นในขณะนี้อย่างถูกต้องสะท้อนให้เห็นว่าไวยากรณ์ดัชนีอินไลน์จะใช้ได้เฉพาะเริ่มต้นด้วย SQL Server 2014 (และรูปแบบบางอย่างในปี 2016):

ป้อนคำอธิบายรูปภาพที่นี่

อินสแตนซ์อื่น ๆ ซึ่งไวยากรณ์นี้ใช้งานได้สำหรับคุณต้องอยู่ใน SQL Server 2014 หรือใหม่กว่า

ในปี 2012 ไม่ว่าคุณจะเข้ากันได้ระดับใดคุณจะต้องสร้างดัชนีแยกต่างหาก


-9

ฉันต้องเรียกใช้ผ่าน SSMS เพื่อทราบแน่นอน แต่ไวยากรณ์นั้นดูไม่ออก ในขณะที่ฉันได้กำหนดคอลัมน์เป็นคีย์หลักแบบอินไลน์ (เช่นคุณกำลังทำ) ฉันไม่เคยพยายามกำหนดดัชนีคลัสเตอร์ที่ไม่ใช่คีย์หลักในแบบนั้น สิ่งที่คุณกำลังทำอยู่นั้นเป็นไปไม่ได้ใน SQL Server เวอร์ชันที่คุณใช้งานอยู่ ฉันคิดว่าคุณควรกำหนดดัชนีคลัสเตอร์โดยใช้ CREATE INDEX มาตรฐานหลังจากสร้างตารางผ่านคำสั่ง CREATE TABLE


2
ฉันคิดว่ามันดูแปลกเหมือนกันเมื่อฉันเห็นครั้งแรก แต่มันใช้ได้ดีกับกล่องอื่น ๆ ทั้งหมดของเรารวมถึงกล่อง dev ของฉัน (มากถึง vnext) และสร้างดัชนีทั้งคู่ได้ดี
คนรวย Benner

บางทีมันเชื่อมโยงกับ SQL Server เวอร์ชันที่รันบนเซิร์ฟเวอร์และ / หรือโหมดความเข้ากันได้ของ SQL ของฐานข้อมูลหรือไม่ SQL Server เพิ่ม 'syntactic sugar' เป็นจำนวนมากในช่วงหลายปีที่ผ่านมา หากคุณย้อนกลับไปมากพอคุณไม่สามารถประกาศตัวแปรและตั้งค่าในบรรทัดเดียวกันได้
Matthew Sontum
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.