C# Insert语句因触发器而崩溃
我得到的错误是“INSERT语句与外键约束“FK_休假_用户”冲突。冲突发生在数据库“TestAtt”、表“dbo.users”、列“userID”中。” 我正试图通过以下方式向用户插入:C# Insert语句因触发器而崩溃,c#,sql,C#,Sql,我得到的错误是“INSERT语句与外键约束“FK_休假_用户”冲突。冲突发生在数据库“TestAtt”、表“dbo.users”、列“userID”中。” 我正试图通过以下方式向用户插入: INSERT into users (firstName, lastName, userName, password, team, fingerID, type, isActive) VALUES ('{0}', '{1}', '{2}', '{3}', '{4}', '{5}', '{6}', '{7}')
INSERT into users (firstName, lastName, userName, password, team, fingerID, type, isActive) VALUES ('{0}', '{1}', '{2}', '{3}', '{4}', '{5}', '{6}', '{7}')",
firstNameAddBox.Text, lastNameAddBox.Text, userNameAddBox.Text, passwordAddBox.Text,
teamAddUserCombo.Text, fingerIdAddBox.Text, userTypeAddCombo.SelectedValue, isActiveCheck.Checked);
我的用户表如下所示:
CREATE TABLE
users
(
userID INT NOT NULL IDENTITY,
userName NVARCHAR(50) COLLATE Romanian_CI_AS NOT NULL,
password NVARCHAR(100) COLLATE Romanian_CI_AS NOT NULL,
firstName NVARCHAR(50) COLLATE Romanian_CI_AS NOT NULL,
lastName NVARCHAR(50) COLLATE Romanian_CI_AS NOT NULL,
team TINYINT NOT NULL,
type TINYINT NOT NULL,
fingerID SMALLINT NOT NULL,
isActive BIT DEFAULT 1 NOT NULL,
CONSTRAINT PK_users PRIMARY KEY (userID),
CONSTRAINT FK_users_userType FOREIGN KEY (type) REFERENCES userType (typeID),
CONSTRAINT users_idx UNIQUE (fingerID)
);
CREATE TABLE
vacation
(
ID INT NOT NULL IDENTITY,
userID INT NOT NULL,
vacation TINYINT DEFAULT 0 NOT NULL,
extraDays TINYINT DEFAULT 0 NOT NULL,
PRIMARY KEY (ID),
CONSTRAINT FK_vacation_users FOREIGN KEY (ID) REFERENCES users (userID)
);
假期表如下所示:
CREATE TABLE
users
(
userID INT NOT NULL IDENTITY,
userName NVARCHAR(50) COLLATE Romanian_CI_AS NOT NULL,
password NVARCHAR(100) COLLATE Romanian_CI_AS NOT NULL,
firstName NVARCHAR(50) COLLATE Romanian_CI_AS NOT NULL,
lastName NVARCHAR(50) COLLATE Romanian_CI_AS NOT NULL,
team TINYINT NOT NULL,
type TINYINT NOT NULL,
fingerID SMALLINT NOT NULL,
isActive BIT DEFAULT 1 NOT NULL,
CONSTRAINT PK_users PRIMARY KEY (userID),
CONSTRAINT FK_users_userType FOREIGN KEY (type) REFERENCES userType (typeID),
CONSTRAINT users_idx UNIQUE (fingerID)
);
CREATE TABLE
vacation
(
ID INT NOT NULL IDENTITY,
userID INT NOT NULL,
vacation TINYINT DEFAULT 0 NOT NULL,
extraDays TINYINT DEFAULT 0 NOT NULL,
PRIMARY KEY (ID),
CONSTRAINT FK_vacation_users FOREIGN KEY (ID) REFERENCES users (userID)
);
这就是触发器:
ALTER TRIGGER "dbo"."newUserTrigger"
on "dbo"."users"
AFTER INSERT
as
begin
DECLARE @newUserID int
SELECT @newUserID = (SELECT userID FROM Inserted)
INSERT INTO vacation (userID) VALUES (@newUserID)
end;
因此,如果我禁用触发器,则insert将起作用,但在触发器打开的情况下,它似乎也不会在休假表中插入userID。我认为您的外键不正确,引用
用户的列是userID
,而不是ID
:
CONSTRAINT FK_vacation_users FOREIGN KEY (userID) REFERENCES users (userID)
但是触发器也会被破坏,因为它可以包含多行(或不包含)行。因此,它应该是:
ALTER TRIGGER "dbo"."newUserTrigger"
on "dbo"."users"
AFTER INSERT
as
begin
INSERT INTO vacation (userID) SELECT userID from Inserted
end;
我认为您的外键不正确,引用用户的列是用户ID
,而不是ID
:
CONSTRAINT FK_vacation_users FOREIGN KEY (userID) REFERENCES users (userID)
但是触发器也会被破坏,因为它可以包含多行(或不包含)行。因此,它应该是:
ALTER TRIGGER "dbo"."newUserTrigger"
on "dbo"."users"
AFTER INSERT
as
begin
INSERT INTO vacation (userID) SELECT userID from Inserted
end;
我认为您的外键不正确,引用用户的列是用户ID
,而不是ID
:
CONSTRAINT FK_vacation_users FOREIGN KEY (userID) REFERENCES users (userID)
但是触发器也会被破坏,因为它可以包含多行(或不包含)行。因此,它应该是:
ALTER TRIGGER "dbo"."newUserTrigger"
on "dbo"."users"
AFTER INSERT
as
begin
INSERT INTO vacation (userID) SELECT userID from Inserted
end;
我认为您的外键不正确,引用用户的列是用户ID
,而不是ID
:
CONSTRAINT FK_vacation_users FOREIGN KEY (userID) REFERENCES users (userID)
但是触发器也会被破坏,因为它可以包含多行(或不包含)行。因此,它应该是:
ALTER TRIGGER "dbo"."newUserTrigger"
on "dbo"."users"
AFTER INSERT
as
begin
INSERT INTO vacation (userID) SELECT userID from Inserted
end;
问题是:
CONSTRAINT FK_vacation_users FOREIGN KEY (ID) REFERENCES users (userID)
这意味着假期中的ID列必须在users中的userId中有一个匹配的值。我认为(ID)应该是(userID)。那么它应该可以正常工作。问题是:
CONSTRAINT FK_vacation_users FOREIGN KEY (ID) REFERENCES users (userID)
CONSTRAINT FK_vacation_users FOREIGN KEY (ID) REFERENCES users (userID)
这意味着假期中的ID列必须在users中的userId中有一个匹配的值。我认为(ID)应该是(userID)。那么它应该可以正常工作。问题是:
CONSTRAINT FK_vacation_users FOREIGN KEY (ID) REFERENCES users (userID)
CONSTRAINT FK_vacation_users FOREIGN KEY (ID) REFERENCES users (userID)
这意味着假期中的ID列必须在users中的userId中有一个匹配的值。我认为(ID)应该是(userID)。那么它应该可以正常工作。问题是:
CONSTRAINT FK_vacation_users FOREIGN KEY (ID) REFERENCES users (userID)
CONSTRAINT FK_vacation_users FOREIGN KEY (ID) REFERENCES users (userID)
这意味着假期中的ID列必须在users中的userId中有一个匹配的值。我认为(ID)应该是(userID)。那就行了
CONSTRAINT FK_vacation_users FOREIGN KEY (ID) REFERENCES users (userID)
应该是
CONSTRAINT FK_vacation_users FOREIGN KEY (userID) REFERENCES users (ID)
应该是
CONSTRAINT FK_vacation_users FOREIGN KEY (userID) REFERENCES users (ID)
应该是
CONSTRAINT FK_vacation_users FOREIGN KEY (userID) REFERENCES users (ID)
应该是
CONSTRAINT FK_vacation_users FOREIGN KEY (userID) REFERENCES users (ID)
比我的答案更好:)@simonatrc-嗯,我们都发现了导致他们问题的“问题”。但我只是加了一个奖励,它迟早会(可能)上来咬它们。谢谢你的快速回复!这就成功了;)比我的答案更好:)@simonatrc-嗯,我们都发现了导致他们问题的“问题”。但我只是加了一个奖励,它迟早会(可能)上来咬它们。谢谢你的快速回复!这就成功了;)比我的答案更好:)@simonatrc-嗯,我们都发现了导致他们问题的“问题”。但我只是加了一个奖励,它迟早会(可能)上来咬它们。谢谢你的快速回复!这就成功了;)比我的答案更好:)@simonatrc-嗯,我们都发现了导致他们问题的“问题”。但我只是加了一个奖励,它迟早会(可能)上来咬它们。谢谢你的快速回复!这就成功了;)