Sql 处理触发器中的多行(大容量插入)

Sql 处理触发器中的多行(大容量插入),sql,sql-server,tsql,Sql,Sql Server,Tsql,我进行批量插入,我有一个触发器,可以相应地进行一些检查和插入: 假设我的批量插入有两列hometeamawayteam HomeTeam AwayTeam Team1 Team3 Team6 Team9 Team3 Team5 我的数据库有两个表,tblTeamsList(Id,TeamName)包含团队,tblPremierLeague(Id,HomeTeam,AwayTeam)是我进行批量插入的。我有一个INSTEAD OF INSE

我进行批量插入,我有一个触发器,可以相应地进行一些检查和插入: 假设我的批量插入有两列hometeamawayteam

HomeTeam     AwayTeam
Team1         Team3
Team6         Team9
Team3         Team5
我的数据库有两个表,tblTeamsList(Id,TeamName)包含团队,tblPremierLeague(Id,HomeTeam,AwayTeam)是我进行批量插入的。我有一个INSTEAD OF INSERT触发器,它检查主队是否在TBLTEAMSL列表中,如果不在TBLTEAMSL列表中,它会将其插入tblteams中,然后它会检查AwayTeam并执行相同的操作。最后,我想用它们的外键而不是名字将它们插入tblPremierleague。这是我的扳机

   instead of INSERT
AS
BEGIN
    DECLARE @homeTeamId INT
    DECLARE @awayTeamId INT
    DECLARE @maxTeamId INT
    DECLARE @matchId INT
    DECLARE @home nvarchar(100)
    DECLARE @away nvarchar(100)

    DECLARE cur CURSOR FOR
    Select HomeTeam,AwayTeam from inserted
    OPEN cur
    FETCH NEXT FROM cur INTO @home, @away

    --- Check if home team has already been inserted into the table.
    SELECT @homeTeamId = -1
    SELECT 
        @homeTeamId = teamId 
    FROM 
        [dbo].[tblTeamslist] t
        JOIN inserted i
        ON t.teamName = @home
    IF (@homeTeamId = -1) 
    BEGIN

        INSERT INTO [dbo].[tblTeamslist] (teamname) SELECT  i.hometeam FROM inserted i

    END

    --- Check if away team has already been inserted into the table.
     SELECT @maxTeamId = 0
    SELECT @maxTeamId = ISNULL(MAX(teamId), 0) from [dbo].[tblTeamslist]


    SELECT @awayTeamId = -1
    SELECT 
        @awayTeamId = teamId 
    FROM 
        [dbo].[tblTeamslist] t
        JOIN inserted i
        ON t.teamName = @away
    IF (@awayTeamId = -1) 
    BEGIN

        INSERT INTO [dbo].[tblTeamslist]  (teamname) SELECT  i.awayteam FROM inserted i

    END

    -- insert a record into the matches table with the home team ID and away team ID.

    INSERT INTO [dbo].[tblpremierLeague] 
    SELECT  @homeTeamId, @awayTeamId
    FROM inserted i
FETCH NEXT FROM cur INTO @home, @away

    END
    CLOSE cur
    DEALLOCATE cur
上面的触发器无法正常工作,我在tblPremierLeague中得到了300个相同的行,所有行的值都相同,如下所示:

HomeTeam        AwayTeam
 -1                1
答案是正确的。此外,在tblTeamsList中多次插入同一团队。
如何更正我的触发器,请提供帮助?

假设id是
标识
列:

-- Add all of the home teams we haven't heard of before.
insert into dbo.tblTeamsList
  select i.HomeTeam
    from inserted as i left outer join
      tblTeamsList as TL on TL.TeamName = i.HomeName
    where TL.Id is NULL

-- Add all of the alien teams we haven't heard of before.
insert into dbo.tblTeamsList
  select i.AwayTeam
    from inserted as i left outer join
      tblTeamsList as TL on TL.TeamName = i.AwayTeam
    where TL.Id is NULL

-- Add any **new** pairs to the league.
insert into tblPremierLeague
  select H.Id, A.Id
    from inserted as i inner join
      tblTeamsList as H on H.TeamName = i.HomeTeam inner join
      tblTeamsList as A on A.TeamName = i.AwayTeam left outer join
      tblPremierLeague as TL on TL.HomeTeam = H.Id and TL.AwayTeam = A.Id
    where TL.Id is NULL
请不要通过折磨行(RBAR)来执行此行。使用集合操作

而且许多人不喜欢命名表的匈牙利式假符号
tblMumble
。我会用
Mumbles