質問

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)

エラーですか? 申し訳ありませんが、どちらも機能します。

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

役に立ちましたか?

解決

(ID)は括弧内にある必要があります。チェック条件や外部キー列のように。 1つの行:

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)
)

注:名前については、私の制約についても常に明示的です。それ以外の場合、SQLサーバーは1ヘクスを生成します。同様に、目立た性とインデックススタイルを明示的に定義します。だから私はこれを書く:

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