1

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)

エラーですか?申し訳ありませんが、両方とも動作します。

修正のために提案されるのは一貫性のない構文ですか?

4

2 に答える 2

5

(id)は括弧内にある必要があります。CHECK条件やFOREIGNKEY列のように。一行で:

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

注:コンマは「テーブルレベルの制約」を意味します。カンマのない他の構文は、「列レベルの制約」を意味します。もちろん、PKはテーブルごとにあり、列レベルで定義できない複合キーを持つことができます。

create table A (
   id int,
   something datetime,

   primary key clustered (id,something)
)

注:名前の制約についても常に明示します。それ以外の場合、SQLServerは16進数に見えるものを生成します。null可能性とインデックススタイルを明示的に定義するだけでなく。だから私はこれを書くでしょう:

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

   CONSTRAINT PK_A PRIMARY KEY CLUSTERED (id,something)
)

最後に、CREATE TABLEによると、これは問題なく、SQLServer2008インスタンスで機能します。

 create table c(id int primary key nonclustered)
于 2010-11-07T20:03:32.513 に答える
0

PRIMARY KEY列リストをそれに続くもの(列または別の制約である可能性があります)から区切る方法がないため、括弧は必須です。

于 2010-11-08T07:27:11.113 に答える