Я работаю над триггером, который должен блокировать вставку, когда @verkoperstatus равен 0;это работает, но по какой-то причине он также останавливает вставку, когда @verkoperstatus равен 1. Что может быть основной причиной этого?
CREATE TRIGGER [dbo].[verkoper_check] ON [dbo].[Verkoper]
FOR INSERT,UPDATE
AS
BEGIN
DECLARE @verkoperstatus bit
DECLARE @gebruikersnaam varchar(25)
SELECT @gebruikersnaam = gebruikersnaam FROM inserted
SELECT @verkoperstatus = verkoper FROM Gebruiker WHERE gebruikersnaam = @gebruikersnaam
IF @verkoperstatus = 0
BEGIN
RAISERROR('Geen verkoper!',18,1);
ROLLBACK;
END
ELSE
BEGIN
COMMIT;
END
END
Он должен вставляться, когда @verkoperstatus равен 1, и выдавать ошибкукогда @verkopstatus равен 0.
Таблица Gebruiker - это ссылки, которые включают столбец 'gebruikersnaam' и столбец 'verkoper'.Значение столбца gebruikersnaam является идентифицирующим столбцом (в данном конкретном случае это «Lars»).Verkoper - это битовый столбец, в котором указано, является ли он продавцом или нет, поэтому он имеет значение 0 или 1.
Цель, которую я пытаюсь достичь, - вставить вкладку в таблицу Verkoper.если «gebruikersnaam» имеет значение «verkoper», равное единице.Это означает, что если в Gebruiker есть строка с «gebruikersnaam» Ларса и веркопер имеет значение 1. Это будет допустимая вставка в таблицу веркоперов.
Поскольку веркопер имеет следующие столбцы:'gebruikersnaam', 'banknaam', 'rekeningnummer', 'controleoptienaam' и 'creditcardnummer'.Когда 'gebruikersnaam' соответствует 'gebruikersnaam' из таблицы Gebruikers AND имеет значение 1 в столбце 'verkoper', эта запись будет разрешена для вставки в таблицу Verkoper.
На данный момент в столбце Gebruikers есть строка, включающая в себя gebruikersnaam 'Lars' и значение verkoper '1'.Значение любой SQL-вставки с gebruikersnaam 'Lars' должно быть разрешено в таблицу Verkoper.
Это, однако, не работает так, как я считаю.
Этиявляются таблицы, упомянутые выше:
CREATE TABLE Verkoper (
gebruikersnaam varchar(25) NOT NULL,
banknaam varchar(255) NULL,
rekeningnummer varchar(32) NULL,
controleoptienaam char(10) NOT NULL,
creditcardnummer integer NULL,
CONSTRAINT pk_Verkoper PRIMARY KEY (gebruikersnaam),
CONSTRAINT fk_Verkoper_Gebruikersnaam FOREIGN KEY (gebruikersnaam) REFERENCES Gebruiker(gebruikersnaam),
CONSTRAINT ck_rekening CHECK (rekeningnummer is NOT NULL OR creditcardnummer is NOT NULL),
CONSTRAINT ck_controleoptie CHECK (controleoptienaam IN('Post', 'Creditcard'))
)
CREATE TABLE Gebruiker(
gebruikersnaam varchar(25) NOT NULL,
voornaam varchar(25) NOT NULL,
achternaam varchar(25) NOT NULL,
adresregel_1 varchar(255) NULL,
adresregel_2 varchar(255) NULL,
postcode char(7) NULL,
plaatsnaam varchar(255) NULL,
land varchar(255) NULL,
geboortedag char(10) NOT NULL,
mailbox varchar(255) NOT NULL,
wachtwoord varchar(255) NOT NULL,
verkoper bit NOT NULL,
CONSTRAINT pk_gebruiker PRIMARY KEY (gebruikersnaam),
)
Для вставок я использую следующие данные:
INSERT INTO Gebruiker VALUES ('Lars', 'Lars', 'Last_name', null, null, null, null, null, '04/04/2019', 'lars@mymailbox.cloud', 'MyPassword', 1)
INSERT INTO Verkoper VALUES ('Lars', 'ING', 'NL32ABN32492809', 'Post', null)