私は一括挿入を行い、それに応じていくつかのチェックと挿入を行うトリガーを持っています: 私の一括挿入に 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 に同じチームを何度も挿入します。トリガーを修正する方法を教えてください。