Domanda

SQL Server 2008 R2

Perché

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

è corretto ed eseguito senza errori?

Ma

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

è un errore? dando

  

la sintassi non corretta in prossimità ')'.

domanda collaterale:
Perché

create table c(id int primary key clustered)  

viene eseguito
ma

create table c(id int primary key nonclustered)

è un errore? Spiacente, sia il lavoro.

E 'la sintassi incoerente per essere suggerito per la correzione?

È stato utile?

Soluzione

L'(id) dovrebbe essere tra parentesi. Come le condizioni di controllare e colonne chiave esterna. Su una riga:

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

Nota: la virgola implica "vincolo a livello di tabella". L'altra sintassi senza i mezzi virgola "vincolo a livello di colonna". Di PKs corso sono per tavolo, si può avere chiavi composte, che non possono essere definiti a livello di colonna:

create table A (
   id int,
   something datetime,

   primary key clustered (id,something)
)

Nota: sarei sempre esplicito dei miei vincoli troppo per i nomi. In caso contrario, SQL Server genera un esagono cercando uno. Nonché definire esplicitamente come valori Null e lo stile di indice. Quindi mi piacerebbe scrivere questo:

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

   CONSTRAINT PK_A PRIMARY KEY CLUSTERED (id,something)
)

Infine, secondo CREATE TABLE , questo è OK e opere sul mio 2008 istanza di SQL Server:

 create table c(id int primary key nonclustered)

Altri suggerimenti

Le parentesi sono essenziali, perché altrimenti non ci sarebbe alcun modo per delimitare l'elenco Colonna chiave principale da qualunque lo segue (che potrebbe essere una colonna o di un altro vincolo).

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top