I've edited my question.
I need to stop an insert or update in a junction table where a value in a column in parent table is NULL. The column in the other table is not unique, i.e. not a primary key.
These are my tables:
CREATE TABLE EMPLOYEE (
eID int PRIMARY KEY,
fName varchar(50) NOT NULL,
lName varchar(50) NOT NULL,
Job varchar(50) NOT NULL,
Manager int NULL,
Hired date NOT NULL,
);
CREATE TABLE "SHIFT" (
sID int PRIMARY KEY,
Day text NOT NULL,
startTime time NOT NULL,
endTime time NOT NULL,
);
CREATE TABLE EMPLOYEE_SHIFT(
ESID int PRIMARY KEY NOT NULL,
EID int NOT NULL,
SID int NOT NULL,
FOREIGN KEY (EID) REFERENCES EMPLOYEE(EID),
FOREIGN KEY (SID) REFERENCES SHIFT(SID));
Sample input data
INSERT INTO EMPLOYEE_SHIFT VALUES (NEXT VALUE FOR SQ1, 101, 1)
INSERT INTO EMPLOYEE_SHIFT VALUES (NEXT VALUE FOR SQ1, 102, 2)
INSERT INTO EMPLOYEE VALUES (101,'Adam','Smith','Manager','102','1998-04-
12');
INSERT INTO EMPLOYEE VALUES (102,'Marry','Jane','CEO',NULL,'1997-01-18');
INSERT INTO "SHIFT" VALUES (1,'Monday','09:00:00','17:00:00');
INSERT INTO "SHIFT" VALUES (2,'Tuesday','09:00','17:00');
Trigger
CREATE TRIGGER TRIGGER01
ON EMPLOYEE_SHIFT
AFTER INSERT
AS
IF NOT EXISTS (select * from EMPLOYEE e
inner join SHIFT s
ON e.eid = s.sid
where MANAGER IS NOT NULL)
BEGIN
RAISERROR('THIS EMPLOYEE DOESN'T HAVE A MANAGER', 10, 1)
ROLLBACK
RETURN
END
The trigger is working, but not by checking if the Manager column is NULL for that unique row. How can I get it to check for each inserted row uniquely?