MS Server TRIGGER kontrolujący warunek

MS Server TRIGGER kontrolujący warunek
E8
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Warszawa
  • Postów: 6
0

Witam,
mam takie tabele w ms sql server:

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

Kopiuj
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

abrakadaber
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 6610
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

E8
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Warszawa
  • Postów: 6
0

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

Kopiuj
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

abrakadaber
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 6610
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

PA
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 3891
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

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.