web-dev-qa-db-de.com

Zusammengesetzter Primärschlüssel auf Tabellenvariable in gespeicherter Prozedur

Ich bin neu in gespeicherten Prozeduren und versuche, einer Tabellenvariablen einen zusammengesetzten Primärschlüssel hinzuzufügen.

DECLARE @statistictemp TABLE (
    MajorName      VARCHAR(50) NOT NULL, 
    SubName       VARCHAR(50) NOT NULL, 
    DetailedName   VARCHAR(50) NOT NULL, 
    UniversityID   SMALLINT    NOT NULL, 
    StatisticValue DECIMAL(9,3)
);

ALTER TABLE @statistictemp 
ADD CONSTRAINT pk_statistictemp 
PRIMARY KEY (MajorName, SubName, DetailedName, UniversityID);

Ich erhalte einen Fehler bei ALTER TABLE @statistictemp Sprichwort

Incorrect syntax near '@statistictemp'. Expecting ID, QUOTED_ID, or '.'.

Was mache ich hier falsch? Wie fügt man einer Tabellenvariablen einen zusammengesetzten Primärschlüssel hinzu?

41
Greg

Du kannst es so machen:

DECLARE @statistictemp TABLE (
    MajorName       VARCHAR(50) NOT NULL, 
    SubName        VARCHAR(50) NOT NULL, 
    DetailedName    VARCHAR(50) NOT NULL, 
    UniversityID    SMALLINT NOT NULL, 
    StatisticValue  DECIMAL(9,3),
    PRIMARY KEY (MajorName, SubName, DetailedName, UniversityID)
);

Sie können testen, ob die Primärschlüsseleinschränkung funktioniert, indem Sie versuchen, Duplikate einzufügen: z.

INSERT INTO @statistictemp(MajorName, SubName, DetailedName, UniversityID) SELECT 'a','b','c',1
INSERT INTO @statistictemp(MajorName, SubName, DetailedName, UniversityID) SELECT 'a','b','c',1

Die zweite Anweisung löst einen Fehler aus:

Meldung 2627, Ebene 14, Status 1, Zeile 13
Verletzung der PRIMARY KEY-Einschränkung 'PK _# 1EA48E8 _ B595483D208CD6FA'. Es kann kein doppelter Schlüssel in Objekt 'dbo. @ Statistictemp' eingefügt werden.
Die Anweisung wurde beendet.

83