【问题标题】:Composite Primary Key On Table Variable In Stored Procedure存储过程中表变量的复合主键
【发布时间】:2012-03-08 13:47:06
【问题描述】:

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

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

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

【问题讨论】:

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


    【解决方案1】:

    你可以这样做:

    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
    

    第二条语句会报错:

    消息 2627,第 14 层,状态 1,第 13 行
    违反主键约束“PK_#1EA48E8_B595483D208CD6FA”。无法插入重复键 对象“dbo.@statistictemp”。
    声明已终止。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-05-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-06-03
      • 1970-01-01
      相关资源
      最近更新 更多