2016-05-05 3 views
0

Visual Studio 2013の連想テーブルに挿入しようとしていますが、テーブルの構造が誤って設定されている可能性があります。私が必要とするのは、AssociativeテーブルがTasksテーブルとStudentテーブルの両方の主キーを取る必要があるということです。連想テーブルに挿入

期待される結果:

StudentID TaskID  Status 
----------- ----------- ------ 
1   1   N 
1   2   N 
1   3   N 
1   4   N 
1   5   N 
1   6   N 
1   7   N 
2   1   N 
2   2   N 
2   3   N 
2   4   N 
2   5   N 
2   6   N 
2   7   N 

任意の助けいただければ幸いです!何をしたい


CREATE TABLE [dbo].[STUDENT] (
[StudentID] INT   IDENTITY (1, 1) NOT NULL, 
... 
PRIMARY KEY CLUSTERED ([StudentID] ASC)); 


CREATE TABLE [dbo].[TASKS] (
[TaskID]  INT   NOT NULL, 
[TaskName]  NVARCHAR (MAX) NULL, 
[TaskCategory] NVARCHAR (MAX) NULL, 
PRIMARY KEY CLUSTERED ([TaskID] ASC)); 


CREATE TABLE [dbo].[ASSOCIATIVE] (
[StudentID] INT  NOT NULL, 
[TaskID] INT  NOT NULL, 
[Status] NCHAR (10) NULL, 
PRIMARY KEY CLUSTERED ([TaskID] ASC, [StudentID] ASC), 
CONSTRAINT [FK_ASSOCIATIVE_STUDENT] FOREIGN KEY ([StudentID]) REFERENCES [dbo].[STUDENT] ([StudentID]), 
CONSTRAINT [FK_ASSOCIATIVE_TASKS] FOREIGN KEY ([TaskID]) REFERENCES [dbo].[TASKS] ([TaskID])); 

答えて

0

CROSS JOINです:

INSERT INTO ASSOCIATIVE(StudentID, TaskID, Status) 
SELECT 
    s.StudentID, t.TaskID, 'N' 
FROM STUDENT s 
CROSS JOIN TASKS t 

あなたは再びこれを実行すると、あなたがPK違反を避けたい場合は、NOT EXISTS条件を追加:

WHERE NOT EXISTS(
    SELECT 1 
    FROM ASSOCIATIVE a 
    WHERE 
     a.TaskID = t.TaskID 
     AND a.StudentID = s.StudentID 
) 
+0

どうもありがとうございます!生徒が追加され、このクエリを実行するときにSTUDENTテーブルにデータを追加する場合は、VALUES @StudentIdのような操作がありますか?これは、主に主キーの違反に遭わないようにすることが主な目的です。 – sang3r

+0

@ sang3r、私の更新答えを見てください。 –

関連する問題