wyzwalacz pesel

0

TREŚĆ POLECENIA BRZMI : Dla podanej poniżej tabeli Osoby napisz wyzwalacz, który w momencie dodawania osoby do bazy sprawdzi poprawność jej numeru PESEL (jeśli będzie niepoprawny to wycofa operację).
Gdzie może być błąd ? Jak robię za pierwszy razem insert to wszystko działa potem chce ponowni dopisać inny wiersz z poprawnym nr pesel i przestaje działać... pomocy

 create table osoby
(id int identity(1,1) not null,
nazwisko varchar(40) not null,
data_urodzenia datetime not null,
pesel varchar(11))

CREATE TRIGGER pessel ON osoby
FOR INSERT
AS
SELECT pesel FROM Osoby
IF (select 
((CAST(SUBSTRING(pesel,1,1) AS int)*1)
+(CAST(SUBSTRING(pesel,2,1) AS int)*3)
+(CAST(SUBSTRING(pesel,3,1) AS int)*7)
+(CAST(SUBSTRING(pesel,4,1) AS int)*9)
+(CAST(SUBSTRING(pesel,5,1) AS int)*1)
+(CAST(SUBSTRING(pesel,6,1) AS int)*3)
+(CAST(SUBSTRING(pesel,7,1) AS int)*7)
+(CAST(SUBSTRING(pesel,8,1) AS int)*9)
+(CAST(SUBSTRING(pesel,9,1) AS int)*1)
+(CAST(SUBSTRING(pesel,10,1) AS int)*3)
+CAST(SUBSTRING(pesel,11,1) AS int))%10 from Osoby) != 0
BEGIN
PRINT 'Wprowadzony pesel jest niepoprawny!'
ROLLBACK
END
GO

select * from Osoby

insert into osoby values ('wadfdfefi','1496-05-27','95052408098') //poprawny pesel
insert into osoby values ('wawesdbgdsvfi','1946-04-22','12345678901') //niepoprawny
insert into osoby values ('sdadasdas','1996-11-23','96042905652') // poprawny pesel

alter table osoby
enable trigger pessel
GO

alter table osoby
disable trigger pessel
GO

drop table osoby
0

bo zamiast sprawdzać dla właśnie wstawionych danych sprawdzasz dla całej tabeli. Poczytać https://www.mssqltips.com/sqlservertip/2342/understanding-sql-server-inserted-and-deleted-tables-for-dml-triggers/

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