クラスター化されていないPK構文の作成は一貫していませんか?
-
29-09-2019 - |
質問
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)
他のヒント
それ以外の場合は、それに続くもの(列または別の制約である可能性がある)から主要な列リストを区切る方法がないため、括弧は不可欠です。
所属していません StackOverflow