我正在尝试在tplayoffStatus
上创建一个触发器,以便不允许团队插入多个丢失的表中。将值插入表tplayoffStatus
时,我一直得到的错误是
子查询返回的值超过1。当子查询遵循=,!=,<,< =,>,> =或子查询用作表达式时,不允许这样做。
任何人都可以帮我吗?我的SELECT
语句在列丢失中返回多个值是错误的吗?
SQL Server 2014表架构:
CREATE TABLE tcollegeFootballTeams
(
TeamAbbreviation varchar(5) NOT NULL PRIMARY KEY,
TeamName varchar(50) NOT NULL,
City varchar(50) NOT NULL,
State varchar(2) NOT NULL,
Wins int NOT NULL,
Losses int NOT NULL
)
CREATE TABLE tplayoffStatus
(
TeamName varchar(50) NOT NULL PRIMARY KEY,
TeamAbbreviation varchar(5) NOT NULL FOREIGN KEY REFERENCES tcollegeFootballTeams(TeamAbbreviation)
);
CREATE TRIGGER [dbo].[trgNoPlayoffForYou]
ON [dbo].[tplayoffStatus]
AFTER INSERT
AS
DECLARE @Losses INT
DECLARE @ErrorMessage VARCHAR(30)
SELECT @Losses = (SELECT Losses
FROM dbo.tcollegeFootballTeams
WHERE (Losses > 1))
IF (@Losses = 'True')
BEGIN
SET @ErrorMessage = 'You may not enter the playoffs with more than 1 loss'
PRINT @ErrorMessage
ROLLBACK TRANSACTION
END
查询1:
INSERT INTO tcollegeFootballTeams (TeamAbbreviation, TeamName, City, State, Wins, Losses)
VALUES ('OSU', 'THE Ohio State University', 'Columbus', 'OH', 10, 2)
[结果] [2]
查询2:
INSERT INTO tcollegeFootballTeams (TeamAbbreviation, TeamName, City, State, Wins, Losses )
VALUES ('BAMA', 'Alabama', 'Tuscaloosa', 'AL', 12, 0)
[结果] [3]
查询3:
INSERT INTO tcollegeFootballTeams (TeamAbbreviation, TeamName, City, State, Wins, Losses )
VALUES ('UGA', 'Georgia', 'Athens', 'GA', 11, 1)
[结果] [4]
查询4:
INSERT INTO tcollegeFootballTeams (TeamAbbreviation, TeamName, City, State, Wins, Losses)
VALUES ('CLEM', 'Clemson', 'Clemson', 'SC', 11, 1)
[结果] [5]
查询5:
INSERT INTO tcollegeFootballTeams (TeamAbbreviation, TeamName, City, State, Wins, Losses)
VALUES ('WIS', 'Wisconsin', 'Madison', 'WI', 11, 1)
[结果] [6]
查询6:
INSERT INTO tcollegeFootballTeams (TeamAbbreviation, TeamName, City, State, Wins, Losses)
VALUES ('ND', 'Notre Dame', 'South Bend', 'IN', 10, 2)
[结果] [7]
查询7:
INSERT INTO tcollegeFootballTeams (TeamAbbreviation, TeamName, City, State, Wins, Losses)
VALUES ('OKLA', 'Oklahoma', 'Norman', 'OK', 10, 2)
[结果] [8]
查询8:
INSERT INTO tcollegeFootballTeams (TeamAbbreviation, TeamName, City, State, Wins, Losses)
VALUES ('MIAF', 'Miami of Florida', 'Coral Gables', 'FL', 10, 2)
答案 0 :(得分:2)
你的触发错了。您需要在inserted
表中查询已插入的记录,并加入tcollegeFootballTeams
的{{1}}表
Losses
答案 1 :(得分:-2)
您可以尝试这样的事情(请记住,损失是数字而不是字符串或布尔值):
DECLARE @TeamAbbr varchar(5);
Select @TeamAbbr = TeamAbbreviation FROM inserted; /* logic table for record just inserted */
Select @Losses = Losses FROM dbo.tcollegeFootballTeams WHERE (TeamAbbreviation = @TeamAbbr);
IF (@Losses > 1)
BEGIN
SET @ErrorMessage = 'You may not enter the playoffs with more than 1 loss'
Print @ErrorMessage
Rollback Transaction
END