ProgrammatieBackend ontwikkelaar

Wat is het verschil tussen opgeslagen procedures en triggers in SQL? Wanneer moet je elk van deze entiteiten gebruiken, en welke fouten maken ontwikkelaars vaak bij hun verwarring?

Slaag voor sollicitatiegesprekken met de Hintsage AI-assistent

Antwoord.

Opgeslagen procedures (stored procedures) zijn programmeerbare blokken die expliciet worden aangeroepen en parameters kunnen accepteren, complexe bedrijfslogica kunnen uitvoeren, met transacties kunnen werken, datasets of uitvoerparameters kunnen retourneren.

Triggers (triggers) zijn speciale objecten die "automatisch" worden geactiveerd door gebeurtenissen van gewijzigde gegevens (INSERT, UPDATE, DELETE), en zorgen voor een transparante uitvoering van vooraf gedefinieerde logica bij bepaalde acties op een tabel.

Wanneer procedures gebruiken

  • Er is behoefte aan verwerking van grote hoeveelheden gegevens.
  • Er is expliciete controle over transacties vereist.
  • Er moet een resultaat of meerdere datasets worden geretourneerd.

Wanneer triggers gebruiken

  • Garanderen van impliciete controles of updates bij elke wijziging van gegevens (bijvoorbeeld auditing).
  • Implementeren van end-to-end integriteitscontroles.

Voorbeeldcode

Opgeslagen procedure:

CREATE PROCEDURE UpdateProductPrice @ProductID int, @NewPrice money AS BEGIN UPDATE Products SET Price = @NewPrice WHERE ProductID = @ProductID; END

Trigger:

CREATE TRIGGER trg_ProductsPriceChange ON Products AFTER UPDATE AS BEGIN INSERT INTO PriceAuditLog(ProductID, OldPrice, NewPrice, ChangeDate) SELECT i.ProductID, d.Price, i.Price, GETDATE() FROM inserted i JOIN deleted d ON i.ProductID = d.ProductID WHERE i.Price <> d.Price END

Vraag met een valkuil.

Q: Is het mogelijk om de volgorde van uitvoering van meerdere AFTER-triggers op dezelfde tabel in SQL Server met standaard middelen te bepalen?

A: Nee, de SQL standaard garandeert niet de volgorde van activatie van AFTER-triggers van dezelfde richting op één tabel. Als de volgorde belangrijk is, moeten ze worden samengevoegd in één.

Voorbeelden van echte fouten door gebrek aan kennis van de details van het onderwerp.


Verhaal

In een CRM-oplossing voor het ondersteunen van functionaliteit voor wijzigingsgeschiedenis werden triggers gebruikt. Door de hoge belasting van massale updates werden records in de log met vertraging toegevoegd, wat de "live"-operaties blokkeerde en tijdelijke onbeschikbaarheid van de service veroorzaakte.


Verhaal

Een ontwikkelaar maakte de logica voor gegevensvalidatie niet in de procedure, maar in de trigger, in de veronderstelling dat de wijzigingen direct zichtbaar zouden zijn voor de gebruiker. Vergeten dat de trigger "transparant" is, stuitte hij op het probleem dat de bedrijfslogica onduidelijk werd ("magie") en moeilijk te debuggen was.


Verhaal

Belangrijk: Vaak wordt een procedure binnen een trigger aangeroepen, of een trigger vanuit een procedure, wat leidt tot recursie en overschrijding van de geneste limieten — bijvoorbeeld, automatische invoer leidt tot herhaalde activering van de trigger via de verwante procedure.