sql >> Databasteknik >  >> RDS >> Sqlserver

SQL Trigger Infoga från flera tabeller

Du refererar inte till de infogade eller borttagna tabellerna som bara är tillgängliga i triggern, så naturligtvis returnerar du fler poster än du behöver i din fråga.

När jag först skriver en trigger, vad jag gör är att skapa en temporär tabell som heter #inserted (och/eller #deleted) och fylla den med flera poster. Det bör matcha designen på bordet som avtryckaren kommer att vara på. Det är viktigt att se till att din temporära tabell har flera indataposter som kan uppfylla de olika kriterierna som påverkar din fråga (så i ditt fall vill du ha några där antalet fall skulle vara 0 och några där det inte skulle till exempel) och det skulle vara typiskt av data som infogats i tabellen eller uppdaterats init. SQL-serverutlösare fungerar på uppsättningar av data, så detta säkerställer också att din utlösare korrekt kan hantera flera poster eller uppdateringar. En korrekt skriven trigger skulle ha testfall du behöver testa för att se till att allt händer korrekt, din #inserted tabell bör innehålla poster som uppfyller alla dessa testfall.

Skriv sedan frågan i en transaktion (och återställ den medan du testar) och anslut till #inserted. Om du gör en infogning med en markering, skriv bara den markerade delen tills du får rätt, lägg sedan till infogningen. För att testa, skriv ett urval från tabellen du infogar till för att se data du infogade innan du återställer.

När du har fått allt att fungera, ändra #inserted-referenserna till inserted, ta bort eventuella testkoder och naturligtvis återställningen (möjligen hela transaktionen beroende på vad du gör.) och lägg till drop och skapa trigger-del av koden. Nu kan du testa din trigger som en trigger, men du är i bra form eftersom du vet att det sannolikt kommer att fungera från dina tidigare tester.




  1. Bygga en enkel webbapp med Bottle, SQLAlchemy och Twitter API

  2. F# Anslut SQLProvider med Postgres

  3. Så här sparar du signatur i MySQL

  4. mysql:Hur man INNER JOIN ett bord men begränsar gå med till 1 resultat med den högsta rösten eller antalet?