2016-11-04 100 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 

我的觸發器:當插入一個新的團隊,應該插入與一個新的歷史行團隊編號

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

錯誤文本是最好的嚮導,它是如此的清晰..

您嘗試插入從i.TeamID一個價值三個欄(TeamID,WinCount,LoseCount)

考慮這些WinCountLoseCount同時插入。


注意:我覺得History表的結構需要重新審視,你應該選擇WinCountLoseCount爲表達而不是實際的列。

+0

我現在明白了。謝謝先生。 –

+0

@KitsuneHifu很高興幫助:) –

0

當您指定插入列時,您會說明您將填充哪些列。但在你的情況下,插入後你只選擇一列(團隊ID)。

您必須修改插入以僅包含一列或選擇以檢索插入時的3個字段。

0

如果您提到必須插入值的列(使用INSERT-SELECT)。

SELECT語句必須包含指定要插入的相同數量的列。另外,請確保它們具有相同的數據類型(否則可能會遇到一些問題)