web-dev-qa-db-fra.com

Variable clé primaire composite sur table dans la procédure stockée

Je suis nouveau dans les procédures stockées et j'essaie d'ajouter une clé primaire composite à une variable de table.

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);

Je reçois une erreur sur ALTER TABLE @statistictemp en disant

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

Qu'est-ce que je fais mal ici? Comment ajouter une clé primaire composite à une variable de table?

41
Greg

Vous pouvez le faire comme ceci:

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)
);

Vous pouvez tester le fonctionnement de la contrainte de clé primaire en essayant d'insérer des doublons: par exemple,

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

La deuxième instruction générera une erreur:

Msg 2627, niveau 14, état 1, ligne 13
Violation de la contrainte PRIMARY KEY 'PK _# 1EA48E8 _ B595483D208CD6FA'. Impossible d'insérer une clé en double dans l'objet 'dbo. @ Statistictemp'.
La déclaration est terminée.

83
Steven Schroeder