Tạo chỉ mục cụm không thành công khi tạo bảng


10

Chúng tôi đã gặp lỗi khi chạy tập lệnh sau;

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 

Cụ thể, đó là việc tạo chỉ mục phân cụm gây ra lỗi sau:

Msg 1018, Cấp 15, Trạng thái 1, Dòng 15
Cú pháp không chính xác gần 'INDEX'. Nếu điều này được dự định là một phần của gợi ý bảng, thì từ khóa A và dấu ngoặc đơn hiện đang được yêu cầu. Xem Sách SQL Server trực tuyến để biết cú pháp thích hợp.

Điều này thật kỳ lạ vì nó hoạt động trên tất cả các máy chủ của chúng tôi ngoại trừ một máy chủ QA cụ thể. Cách khắc phục chúng tôi đưa ra là tạo chỉ mục được nhóm bên ngoài câu lệnh tạo bảng nhưng tôi có quan tâm nếu có ai gặp phải vấn đề này trước đây không?

Câu trả lời:


11

Cú pháp khai báo chỉ số inline đã được bổ sung trong SQL Server 2014, mặc dù đó hoàn toàn không rõ ràng trong chính thức CREATE TABLEtài liệu . Sau khi nói chuyện với chủ sở hữu tài liệu, chủ đề đó hiện phản ánh chính xác rằng cú pháp chỉ mục nội tuyến chỉ hợp lệ bắt đầu với SQL Server 2014 (và một số biến thể trong năm 2016):

nhập mô tả hình ảnh ở đây

Các phiên bản khác, nơi cú pháp này phù hợp với bạn, phải có trên SQL Server 2014 hoặc mới hơn.

Vào năm 2012, bất kể mức độ tương thích, bạn sẽ cần tạo chỉ mục riêng.


-9

Tôi phải chạy nó qua SSMS để biết chắc chắn, nhưng cú pháp đó có vẻ hợp với tôi. Mặc dù tôi đã xác định các cột là khóa chính nội tuyến (giống như bạn đang làm) Tôi chưa bao giờ cố gắng xác định một chỉ mục được nhóm không phải là khóa chính theo kiểu đó. Những gì bạn đang làm đơn giản là không thể có trong phiên bản SQL Server bạn đang sử dụng. Tôi nghĩ bạn nên xác định chỉ mục được nhóm bằng cách sử dụng INDEX CREATE tiêu chuẩn sau khi bảng được tạo thông qua câu lệnh CREATE TABLE.


2
Tôi nghĩ rằng nó trông cũng kỳ quặc khi lần đầu tiên tôi nhìn thấy nhưng nó hoạt động tốt trên tất cả các hộp khác của chúng tôi, bao gồm cả hộp dev của tôi (lên đến vnext). Và tạo ra cả hai chỉ số tốt.
Rich Benner

Có lẽ sau đó nó được gắn với phiên bản SQL Server đang chạy trên máy chủ và / hoặc chế độ tương thích SQL của cơ sở dữ liệu? SQL Server đã thêm rất nhiều "cú pháp cú pháp" trong những năm qua. Nếu bạn quay lại đủ xa, bạn thậm chí không thể khai báo một biến và đặt nó trong cùng một dòng.
Matthew Sontum
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.