0

私は一括挿入を行い、それに応じていくつかのチェックと挿入を行うトリガーを持っています: 私の一括挿入に 2 つの列 HomeTeam AwayTeam があるとしましょう。

HomeTeam     AwayTeam
Team1         Team3
Team6         Team9
Team3         Team5

私のデータベースには、チームを含む tblTeamsList(Id,TeamName) と、一括挿入を行う tblPremierLeague(id,HomeTeam,AwayTeam) の 2 つのテーブルがあります。HomeTeam が tblTeamsList にあるかどうかをチェックする INSTEAD OF INSERT トリガーがあります。そして最後に、名前ではなく外部キーを使用して 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

awayteamId は正しいです。さらに、tblTeamsList に同じチームを何度も挿入します。トリガーを修正する方法を教えてください。

4

1 に答える 1