31

我是新來的存儲過程,並試圖添加一個複合主鍵到表變量。複合主鍵在表變量在存儲過程

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

我得到的ALTER TABLE @statistictemp一個錯誤說

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

我在做什麼錯在這裏?如何將複合主鍵添加到表變量?

回答

66

你可以這樣說:

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

您可以測試該主鍵約束的工作原理是試圖插入重複: 例如,

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

第二條語句將拋出一個錯誤:

Msg 2627, Level 14, State 1, Line 13
Violation of PRIMARY KEY constraint 'PK_#1EA48E8_B595483D208CD6FA'. Cannot insert duplicate key in object '[email protected]'.
The statement has been terminated.