سؤال

SQL Server 2008 R2

لماذا

create table A
(
   id int,
   primary key nonclustered (id)
)

هل الصحيح والتنفيذ بدون أخطاء؟

ولكن

create table A
(
   id int,
   primary key nonclustered id
)

هل خطأ؟ إعطاء

بناء جملة غير صحيح بالقرب من ").

سؤال جانبي:
لماذا

create table c(id int primary key clustered)  

يتم تنفيذ
لكن

create table c(id int primary key nonclustered)

هل خطأ؟ آسف ، كلا العمل.

هل من غير ذلك بناء جملة غير متسقة للتصحيح؟

هل كانت مفيدة؟

المحلول

يجب أن يكون (المعرف) بين قوسين. مثل شروط التحقق والأعمدة المفاتيح الخارجية. على سطر واحد:

create table A (id int, primary key nonclustered (id)) --ok
create table A (id int, primary key nonclustered id) --not ok

ملاحظة: تعني الفاصلة "قيد مستوى الجدول". بناء الجملة الآخر بدون الفاصلة تعني "قيود مستوى العمود". بالطبع PKs لكل جدول ، يمكنك الحصول على مفاتيح مركبة لا يمكن تعريفها على مستوى العمود:

create table A (
   id int,
   something datetime,

   primary key clustered (id,something)
)

ملاحظة: سأكون دائمًا واضحًا بشأن قيوداتي أيضًا للأسماء. خلاف ذلك SQL Server إنشاء واحد يبحث واحد. وكذلك بشكل صريح تحديد قابلية الفهرس وأسلوب الفهرس. لذلك سأكتب هذا:

create table A (
   id int NOT NULL,
   something datetime NOT NULL,

   CONSTRAINT PK_A PRIMARY KEY CLUSTERED (id,something)
)

وأخيرا ، وفقا ل اصنع جدول, ، هذا جيد ويعمل على مثيل SQL Server 2008:

 create table c(id int primary key nonclustered)

نصائح أخرى

تعتبر الأقواس ضرورية لأنه وإلا فلن تكون هناك طريقة لتحديد قائمة الأعمدة الرئيسية الرئيسية من أي شيء يتبعه (والذي يمكن أن يكون عمودًا أو قيدًا آخر).

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top