web-dev-qa-db-ja.com

ストアドプロシージャのテーブル変数の複合主キー

ストアドプロシージャを初めて使用し、複合主キーをテーブル変数に追加しようとしています。

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

ここで何が間違っていますか?複合主キーをテーブル変数にどのように追加しますか?

41
Greg

次のようにできます:

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

2番目のステートメントはエラーをスローします。

メッセージ2627、レベル14、状態1、行13
PRIMARY KEY制約 'PK _#1EA48E8 _ B595483D208CD6FA'の違反。オブジェクト 'dbo。@ statistictemp'に重複キーを挿入できません。
ステートメントは終了されました。

83