2016-11-04 4 views
0

この基本データベースでトリガーを書く方法を学び始めました。SQL Serverのトリガーは挿入できません

私の最初のデータベースも作成しています。

スキーマ

チーム

TeamID int PK (TeamID int IDENTITY(0,1) CONSTRAINT TeamID_PK PRIMARY KEY) 
TeamName nvarchar(100) 

は歴史

HistoryID int PK (HistoryID int IDENTITY(0,1) CONSTRAINT HistoryID_PK PRIMARY KEY) 
TeamID int FK REF Team(TeamID) 
WinCount int 
LoseCount int 

マイトリガー:新しいチームが挿入されたとき、それはそれで新しい歴史の行を挿入する必要がありチームID

それを実行した
CREATE TRIGGER after_insert_Player 
ON Team 
FOR INSERT 
AS 
BEGIN 
    INSERT INTO History (TeamID, WinCount, LoseCount) 
     SELECT DISTINCT i.TeamID 
     FROM Inserted i 
     LEFT JOIN History h ON h.TeamID = i.TeamID 
          AND h.WinCount = 0 AND h.LoseCount = 0 
END 

は、INSERT文の選択リストには、挿入リストよりも少ない項目が含まれてい

を返します。 SELECT値の数は、INSERT列の数と一致する必要があります。

ご協力いただきありがとうございます。 SQL Serverを使用しています

+1

エラーはトリガーとは関係ありません。挿入する列は3つありますが、2列だけを選択しています。 – KumarHarsh

答えて

3

エラーテキストが最良のガイドである、それはとても明確な..です挿入しながらあなたは3つの列(TeamID,WinCount,LoseCount)

i.TeamIDから一つの値を挿入しようと

は、これらのWinCountLoseCount考えます。


:私はあなたが実際の列としてではない表現としてWinCountLoseCountを選択する必要があり、Historyテーブルの構造を再考する必要があると思います。

+0

私は今理解しました。ありがとうございます。 –

+0

@KitsuneHifu喜んで:) –

0

[挿入]列を指定すると、入力する列が決まります。しかし、あなたの場合は、挿入直後に1つの列(チームID)のみを選択します。

挿入のように3つのフィールドを取得するには、1つの列のみを含むように挿入を変更するか、または選択する必要があります。

0

値を挿入する必要がある列を指定する場合(INSERT-SELECTを使用)。

SELECTステートメントには、挿入するのと同じ数の列が含まれている必要があります。また、同じデータ型であることを確認してください(別の問題に直面する可能性があります)。

関連する問題