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

Dies funktioniert nicht. Wie kann ich das machen?SQL-Identität als Primärschlüssel erstellen?

+7

Für die Zukunft, wenn Sie sagen, dass das nicht funktioniert, überlegen Sie, was Sie meinen. Fällt es irgendwie still? Erhalten Sie einen Fehler und wenn ja, was ist der Fehler? Brennt dein Computer spontan? Schlägt es fehl, wenn Sie die Tabelle erstellen oder Zeilen in die Tabelle einfügen? –

Antwort

55

einfache Änderung Syntax ist alles, was benötigt wird:

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

Durch explizit die „Einschränkung“ Schlüsselwort verwenden, können Sie die Primärschlüsselbedingung einen bestimmten Namen geben, anstatt in Abhängigkeit von SQL Server Auto-assign ein Name:

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

die „CLUSTERED“ Schlüsselwort hinzufügen, wenn diese am sinnvollsten auf der Grundlage Ihrer Verwendung der Tabelle macht (dh der Saldo der Suche nach einem bestimmten idImagen und Menge des Schreibens überwiegt die Vorteile des Clustering der Tabelle von einem anderen Index).

8

Dies ist ähnlich den Skripten, die wir in unserem Team generieren. Erstellen Sie zuerst die Tabelle und dann pk/fk und andere Einschränkungen.

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

Gibt es einen Grund, warum Sie vermeiden, den Primärschlüssel in der Anweisung create table zu erstellen? –

+3

Ich gehe davon aus, dass wir ursprünglich Skripte nachgeahmt haben, die mit Tools wie Enterprise Manager erstellt wurden. Es vermittelt, dass Sie eine Primärschlüsseleinschränkung erstellen (im Gegensatz zu einer Spalteneigenschaft). Außerdem können Sie die Einschränkung benennen. Am Ende funktionieren beide Wege, also denke ich, dass es eine Frage der Präferenz ist, welche einfacher zu lesen/zu pflegen ist. – Mayo

1

Wenn Sie T-SQL verwenden, ist das einzige, was falsch mit Ihrem Code, dass Sie Klammern {} statt Klammern verwendet ().

PS: Beide IDENTITY und PRIMARY KEY implizieren NOT NULL, so können Sie das weglassen, wenn Sie es wünschen.

Verwandte Themen