2016-11-04 99 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语句必须包含指定要插入的相同数量的列。另外,请确保它们具有相同的数据类型(否则可能会遇到一些问题)