Și, ca de obicei, începem cu o mică teorie, învățăm ce este un declanșator și, în general, de ce este nevoie. Ie Să definim declanșatorul și să analizăm scopul acestuia în baza de date.
Definiția și scopul declanșatorului
Trigger - în baza de date este o procedură comună stocată, dar nu este cauzată de utilizator, ci este cauzată de un eveniment care poate apărea în baza de date. Evenimentele pot fi următoarele și se referă la ambele tabele și vizualizări VIEW:
- INSERT - adăugarea de înregistrări în tabel;
- DELETE - șterge înregistrările din tabel;
- UPDATE - actualizează înregistrările tabelelor.
Cu definiția dată, acum să ne dăm seama de ce sunt necesare aceste declanșatoare. Și au nevoie doar de un singur scop, punerea în aplicare a acțiunilor suplimentare înainte sau după instrucțiunea sql în care sunt prezente evenimentele de mai sus. Înseamnă, puteți specifica, când să executați și la ce eveniment să reacționați. Puteți scrie un declanșator la toate evenimentele (inserați, ștergeți, actualizați) și puteți face una sau două.
Ce măsuri suplimentare se înțelege, în principiu, orice exemplu, un insert eveniment poate scrie un trigger si agata-l pe masă, și cu adăugarea de înregistrări, de exemplu, trimite o notificare către oficiul poștal, sau un alt exemplu, pe care le vom discuta mai jos, a cărei esență este de a conserva înregistrări vechi și noi la actualizarea (actualizarea). un fel de audit al tuturor modificărilor dintr-un tabel dat.
După cum am spus, exemplul nostru va fi după cum urmează: vom verifica toate modificările dintr-un anumit tabel, adică declanșatorul va fi apelat la evenimentul de actualizare.
Am implementat deja o sarcină similară, care a fost luată în considerare în materialul Logging of changes of data în tabelul Transact-SQL. Dar acolo nu ne-am folosit de factori declanșatori folosit un fel de metode improvizate de a stoca toate schimbările, dar astăzi în materialul Transact-SQL - lucrul cu XML, vom folosi datele XML este în declanșator.
Notă: Vom efectua toate acțiunile din Studio de administrare a serverului SQL.
Și pentru început, hai să creăm un tabel pe care să închidem declanșatorul:
Codul de creare a tabelului:
Și adăugăm câteva linii, pe care le vom actualiza mai târziu, am adăugat următoarele date și le-am verificat disponibilitatea cu o simplă interogare selectată
Acum, să creăm un tabel în care vom scrie toate modificările, l-am numit audit.
Codul pentru crearea tabelului de audit:
- id este un identificator auto-incrementat;
- table_name - numele tabelului în care a avut loc schimbarea;
- operație, în acest caz vom scrie o actualizare acolo;
- record_old - date xml ale liniei vechi;
- record_new - xml date noi;
- username - cine sa schimbat;
- date_ch - când este schimbat.
Acum, sa trecem direct la scrierea pe trăgaci, și pentru a începe cu, voi da un exemplu de sintaxă, desigur, un pic simplificat, dar chiar și mai bine pentru începători, cât și mai ușor de înțeles și este suficient pentru a scrie prima declanșare. Și puteți să vă uitați la toată sintaxa de pe Internet, de exemplu, în ajutorul oficial Transact-SQL. Cred că pentru incepatori este un pic complicat și de neînțeles, așa că aici este o sintaxă simplă, ca să spunem așa fundamentul acestei sintaxă:
CREAȚI TRIGGERnumărul declanșatoruluiÎn tabelul de agățat
PENTRU ce fel de operațiuni (actualizare, inserare, ștergere)
Aici scriem instrucțiuni SQL care ar trebui executate atunci când triggerul este declanșat
Acum rămâne să verificăm funcționarea acestui declanșator, pentru a începe să executăm actualizarea cu o singură linie.
Și să vedem ce avem în tabelul de audit.
După cum puteți vedea, datele XML sunt ușor de vizualizat și vedem că în vechea înregistrare au existat câteva valori, iar în cel nou, noile date au fost în mod corespunzător noi.
Prin modul în care dacă faceți clic pe datele XML pot fi accesate într-o fereastră separată, care să fie și mai clar văzut că în datele pe care le-am actualizat, dar acum să încercăm să actualizeze mai multe rânduri, și a vedea cum să se comporte în declanșare nostru pentru a rula o cerere de actualizare simplă :
Și verificați auditul
După cum puteți vedea, am adăugat doar o singură linie, dar am actualizat, de asemenea, cele două linii, este foarte usor toate datele noastre este scris în documentul XML, și stocate respectiv în record_old vechi două linii, iar în record_new schimbat două linii, adică, indiferent de numărul de linii pe care le actualizăm, acestea vor fi afișate în documentul xml. Acum, hai să faceți același clic pe datele xml și să vedem ce se întâmplă.
Și aici sunt afișate toate liniile pe care le-am atins.