2009-08-31 23 views
25
create table ImagenesUsuario 
{ 
    idImagen int primary key not null IDENTITY 
} 

Questo non funziona. Come posso fare questo?Crea identità SQL come chiave primaria?

+7

Per il futuro, quando si dice "Questo non funziona" si consideri spiegare cosa intendi. Fallisce silenziosamente in qualche modo? Ricevi un errore e, in tal caso, qual è l'errore? Il tuo computer brucia spontaneamente? Fallisce quando si crea la tabella o si inseriscono le righe nella tabella? –

risposta

55

semplice modifica alla sintassi è tutto ciò che è necessario:

create table ImagenesUsuario (
    idImagen int not null identity(1,1) primary key 
) 

esplicitamente utilizzando la parola chiave "vincolo", si può dare il vincolo di chiave primaria un nome particolare, piuttosto che a seconda di SQL Server per l'auto-assegnazione un nome:

create table ImagenesUsuario (
    idImagen int not null identity(1,1) constraint pk_ImagenesUsario primary key 
) 

aggiungere la parola chiave "RAGRUPPATO" se questo ha più senso, sulla base di utilizzo del tavolo (cioè, il bilancio delle ricerche per un particolare idImagen e la quantità di scrittura supera i benefici del clustering del tabella da qualche altro indice).

8

Questo è simile agli script che generiamo sul nostro team. Creare prima la tabella, quindi applicare pk/fk e altri vincoli.

CREATE TABLE [dbo].[ImagenesUsuario] (
    [idImagen] [int] IDENTITY (1, 1) NOT NULL 
) 

ALTER TABLE [dbo].[ImagenesUsuario] ADD 
    CONSTRAINT [PK_ImagenesUsuario] PRIMARY KEY CLUSTERED 
    (
     [idImagen] 
    ) ON [PRIMARY] 
+2

C'è qualche ragione per cui si evita di creare la chiave primaria nell'istruzione della tabella create? –

+3

Suppongo che originariamente abbiamo imitato gli script prodotti da strumenti come Enterprise Manager. Traspone che stai creando un vincolo di chiave primaria (al contrario di una proprietà di colonna). Permette anche di nominare il vincolo. Alla fine, entrambi i modi funzionano, quindi immagino sia una questione di preferenza su quale sia più facile leggere/mantenere. – Mayo

1

Se stai usando T-SQL, l'unica cosa che non va con il tuo codice è che si è utilizzato parentesi {} invece di parentesi ().

PS: Entrambi IDENTITY e PRIMARY KEY implicano NOT NULL, quindi puoi ometterlo se lo desideri.

Problemi correlati