存储过程中表变量的复合主键

时间:2012-02-17 05:47:00

标签: sql sql-server sql-server-2008 stored-procedures primary-key

我是存储过程的新手,并尝试将复合主键添加到表变量中。

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 '.'.

我在这里做错了什么?如何将复合主键添加到表变量?

1 个答案:

答案 0 :(得分:81)

你可以这样做:

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

第二个语句会抛出错误:

  

Ms 2627,Level 14,State 1,Line 13
  违反PRIMARY KEY约束'PK_ #1EA48E8 _B595483D208CD6FA'。无法插入重复键   对象'dbo。@ statistictemp'。
  声明已经终止。