MS Server TRIGGER kontrolujący warunek

0

Witam,
mam takie tabele w ms sql server:

create table Student (
ID_Student 	int 		not null primary key,
Imie 		varchar(20) 	not null,
Nazwisko 	varchar(50) 	not null)
create table Praca_dyplomowa (
ID_Praca_dyplomowa 	int not null primary key,
Temat 				varchar(max) not null)

create table Autor (
ID_Student 		int not null foreign key references Student(ID_Student),
ID_Praca_dyplomowa 	int not null foreign key references Praca_dyplomowa(ID_Praca_dyplomowa),
CONSTRAINT pk_Autor  PRIMARY KEY (ID_Student, ID_Praca_dyplomowa))

Potrzebuję stworzyć TRIGGER nie pozwalający wprowadzić więcej niż 3 Autorów jednej pracy dyplomowej (jeden temat może opracowywać max 3 Studentów) lecz nie bardzo wiem jak to zrobić,
Proszę o wskazówki
Pozdrawiam

0

stworzyć triggera befor insert, update na tabeli autor, który będzie sprawdzał ile jest rekordów w tabeli autor do danego ID_Praca_dyplomowa i jeśli więcej niż 2 to będzie zgłaszał wyjątek. Jak napisać triggera, sprawdzić ile jest rekordów z danym id, jak pobrać dane z "właśnie wstawianego rekordu", zgłosić wyjątek i na wiele innych pytań odpowie Ci google

0

Proszę o sprawdzenie i dalsze wskazówki ;) Z góry dziękuję

CREATE OR REPLACE TRIGGER sprawdz_ilosc
before INSERT OR UPDATE ON Autor
FOR each ROW 
BEGIN
	IF (SELECT COUNT(Autor.ID_Praca_dyplomowa) FROM  Autor JOIN Praca_dyplomowa ON Praca_dyplomowa.ID_Praca_dyplomowa=Autor.ID_Praca_dyplomowa) > 3
	THEN dbms_output.put_line('Wiecej niz 3 Autorow');
	END IF;
END

0

poczytaj http://sqlhints.com/2016/02/28/inserted-and-deleted-logical-tables-in-sql-server/
musisz znaleźć liczbę autorów, którzy są przypisani do pracy dla której właśnie próbujesz wstawić rekord

0

Składnia nie jest zgodna z T-SQL:

  1. Nie ma czegoś takiego jak create or replace co najwyżej od wersji >= 2016 możesz uzyć create or alter
  2. ON table musi być drugie
  3. Nie ma triggera before
  4. for each row to w ORACLE
  5. dbms_output.put_line to w Oracle, w t-sql możesz użyc print

Poczytaj https://docs.microsoft.com/en-us/sql/t-sql/statements/create-trigger-transact-sql?view=sql-server-2017

Nie musisz się odnosić do tabeli praca_dyplomowa wystarczy, że wybierzesz tylko te ID_Praca_dyplomowa, które są w tabeli inserted

1 użytkowników online, w tym zalogowanych: 0, gości: 1