Kümelenmiş dizin oluşturma tablo oluşturmada başarısız oluyor


10

Aşağıdaki komut dosyasını çalıştırırken bir hatayla karşılaştık;

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 

Özellikle, aşağıdaki hatayı atan kümelenmiş dizin oluşturmadır:

Msg 1018, Seviye 15, Durum 1, Satır 15
'INDEX' yakınında yanlış sözdizimi. Bu, bir tablo ipucunun parçası olarak tasarlandıysa, A WITH anahtar sözcüğü ve parantez gereklidir. Doğru sözdizimi için SQL Server Books Online'a bakın.

Belirli bir KG sunucusu dışında tüm sunucularımızda çalıştığı için bu garip. Yerleştirdiğimiz düzeltme, küme dizinini tablo oluşturma deyiminin dışında oluşturmaktır, ancak daha önce bu sorunla karşılaşan birileriyle ilgilenir miyim?

Yanıtlar:


11

O olsa satır içi endeks beyanı için sözdizimi, SQL Server 2014 eklendi is oldu kesinlikle belirsiz resmi CREATE TABLEbelgeler . Belge sahipleriyle konuştuktan sonra, bu konu satır içi dizin sözdiziminin yalnızca SQL Server 2014'ten (ve 2016'daki bazı varyasyonlardan) geçerli olduğunu doğru bir şekilde yansıtmaktadır:

resim açıklamasını buraya girin

Bu sözdiziminin sizin için çalıştığı diğer örneklerin SQL Server 2014 veya daha yeni sürümlerinde olması gerekir.

2012'de, uyumluluk düzeyinden bağımsız olarak, dizini ayrı olarak oluşturmanız gerekir.


-9

Kesin olarak bilmek için SSMS'yi çalıştırmam gerekirdi, ancak bu sözdizimi bana bakıyor. Sütunları satır içi birincil anahtarlar olarak tanımladığım halde (yaptığınız gibi) hiçbir zaman bu şekilde birincil anahtar olmayan kümelenmiş bir dizin tanımlamaya çalışmadım. Yaptığınız SQL Server sürümünde yaptığınız şey mümkün değil. Tablo CREATE TABLE deyimi ile oluşturulduktan sonra standart bir CREATE INDEX kullanarak kümelenmiş dizin tanımlamanız gerektiğini düşünüyorum.


2
Ben ilk gördüğümde çok tuhaf görünüyordu ama benim dev kutuları (vnext kadar) dahil olmak üzere, tüm diğer kutuları, sadece iyi çalışıyor. Ve her iki dizini de iyi yaratır.
Rich Benner

Belki de sunucuda çalışan SQL Server sürümüne ve / veya veritabanının SQL uyumluluk moduna bağlıdır? SQL Server yıllar içinde birçok 'sözdizimsel şeker' ekledi. Yeterince geriye giderseniz, bir değişkeni bildirip aynı satıra ayarlayamazsınız.
Matthew Sontum
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.