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 条件和 FOREIGN KEY 列。一行:

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 Server 会生成一个看起来是十六进制的。以及明确定义可空性和索引样式。所以我会写这个:

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

   CONSTRAINT PK_A PRIMARY KEY CLUSTERED (id,something)
)

最后,根据CREATE TABLE,这没关系,适用于我的 SQL Server 2008 实例:

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

括号是必不可少的,因为否则将无法将 PRIMARY KEY 列列表与其后面的任何内容(可能是列或另一个约束)分隔开。

于 2010-11-08T07:27:11.113 回答