1

私はこれらの2つのテーブルを持っています...

表1:

IDPlayer  int

表 2:

ID_event int (Autoincrement - probably bad)
IDPlayer2  int
participate  bit

そして私はこのコマンドを持っていますが、私は知りません.1つの挿入が1つのイベントであることをどのように行うのですか...

Insert into Table2 (ID_IDPlayer2) 
Select Table1.IDPlayer
FROM Table1 

出力:

event  player  participate  
1   1   False
2   2   False
3   3   False
4   4   False
5   1   False
6   2   False
7   3   False
8   4   False

しかし、私はこれが欲しい:

event  player  participate  
    1   1   False
    1   2   False
    1   3   False
    1   4   False
    2   1   False
    2   2   False
    2   3   False
    2   4   False
4

1 に答える 1

0

SQL Server を使用している場合は、

自動インクリメントを引き続き使用できますが、「イベント」列の ID 挿入を有効にすることができます。

SET IDENTITY_INSERT Table2 ON;

その後、特定のイベントのテーブル 2 にプレーヤーを挿入できます。次の文は、すべてのプレーヤーをイベント 1 に挿入します。

Insert into Table2 (ID_event , ID_IDPlayer2) 
Select 1, Table1.IDPlayer
FROM Table1 

それにもかかわらず、私はこれにオートインクリメントを使用しません。イベント (EventsTable) を格納する 2 番目のテーブルを保持し、必要に応じてそこに自動インクリメントを保持し、Table2.ID_Event を EventsTable.ID への参照 (外部キーとして) にする必要があると思います。

要件に基づく解決策は、トリガーを使用することです。例:

CREATE TABLE Events (id INT); #Events table

CREATE TABLE Table2  (ID_event INT, IDPlayer2 INT); #Events and player relation table

CREATE TABLE Table1  (IDPlayer2 INT); #Players table
INSERT INTO Table1 VALUES (1);
INSERT INTO Table1 VALUES (2);
INSERT INTO Table1 VALUES (3);
INSERT INTO Table1 VALUES (4);


CREATE TRIGGER NewEvent ON Events AFTER INSERT AS
BEGIN
    INSERT INTO Table2 SELECT inserted.id, IDPlayer2 FROM Table1, inserted;
END

INSERT INTO Events VALUES (1001);
INSERT INTO Events VALUES (1002);

SELECT * FROM Table2;
于 2013-04-29T09:55:55.753 に答える