23. februar 2012 - 20:30Der er
3 kommentarer og 1 løsning
Triggers after insert update
Følgende trigger fungere fint, men prorgammet giver kun den første raiserror tilbage uanset om fejlne ligger i det andet kriterium. Foreslag til forbedring modtages gerne:
CREATE TRIGGER tg_Site ON dbo.site AFTER INSERT, UPDATE AS
BEGIN SET NOCOUNT ON;
IF EXISTS ( SELECT * FROM dbo.site, dbo.dkj_site_spec WHERE dbo.dkj_site_spec.site_seq_no = dbo.site.site_seq_no AND dbo.dkj_site_spec.report_to_dkj = '1' AND dbo.site.site_name IS NULL )
BEGIN RAISERROR ('LOKALITETEN SKAL HAVE ET NAVN',16,1) ROLLBACK TRANSACTION END;
IF EXISTS ( SELECT * FROM dbo.site, dbo.dkj_site_spec WHERE dbo.dkj_site_spec.site_seq_no = dbo.site.site_seq_no AND dbo.site.created > '01-01-2010' AND dbo.site.init IS NULL )
BEGIN RAISERROR ('LOKALITETEN SKAL HAVE EN SAGSBEHANDLER',16,1) ROLLBACK TRANSACTION END;
I dette særtema ser vi på, hvordan cloud og AI bliver fundamentet for virksomhedernes digitale forretning, og hvordan de nye muligheder for automatisering og forretningsværdi kan udnyttes uden at miste overblik, sikkerhed og menneskelig kontrol.
Og du er sikker på, at der ikke findes en forekomst i tabellerne, der allerede opfylder det første kriterie? Jeg mener; din trigger tester jo også på alt det data, der i forvejen ligger i tabellerne, og ikke kun på det du prøver at sætte ind (hvilket jeg nok selv ville have foretrukket).
Ja, jeg ville kun checke det data man forsøger at indsætte/update. Jeg ville nok benytte en BEFORE INSERT trigger i stil med:
CREATE TRIGGER tg_Site BEFORE UPDATE ON dbo.site FOR EACH ROW BEGIN IF NEW.site_name IS NULL THEN BEGIN RAISERROR ('LOKALITETEN SKAL HAVE ET NAVN',16,1) ROLLBACK TRANSACTION END; ELSEIF NEW.init IS NULL THEN BEGIN RAISERROR ('LOKALITETEN SKAL HAVE EN SAGSBEHANDLER',16,1) ROLLBACK TRANSACTION END; END IF; END;
og en tilsvarende BEFORE UPDATE trigger - for jeg mener ikke du kan kombinere en UPDATE og INSERT trigger i MySql (men der tager jeg muligvis fejl).
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.