Welcome to Sign in | Help
in Search

Problema creare trigger

Last post 05-23-2008, 4:20 PM by LGS. 3 replies.
Sort Posts: Previous Next
  •  05-12-2008, 9:09 PM 4863

    Problema creare trigger

    Problema creare trigger

    Am de rezolvat urmatoarea problema.

    Trebuie sa creez un trigger care sa se lanseze de fiecare data cand o inregistrare dintr-o tabela este modificata. ( adaugare inregistrare noua / update ) Nu folosesc stergeri.

    Pana aici totul ok, insa , acest trigger trebuie sa completeze in inregistrarea respectiva un camp cu starea acesteia. Problema este generate de faptul ca procedura apelata storata care completeaza starea nu poate identifica inregistrarea prin cheie sau clauza where. Nu stim exact care este cheia de localizare.

    Stiti sa existe o modalitate de a identifica inregistrarile cu pricina in interiorul triggerului,  la modul “last modified”… “current row” ..orice in zona. Eu nu am reusit sa gasesc.

     

                                        Multumesc anticipat, Stefan

  •  05-12-2008, 11:25 PM 4864 in reply to 4863

    Re: Problema creare trigger

    Adaugă un câmp INT IDENTITY(1,1) pentru identificarea în mod unic a fiecărei înregistrări
    /
    caută în tabela respectivă un index care este UNIQUE

    şi foloseşti tabela INSERTED !

  •  05-13-2008, 9:27 AM 4868 in reply to 4863

    Re: Problema creare trigger

    Pentru a detalia puţin răspunsul lui Bogdan, precizez că în SQL Server trigger-ii sunt lansaţi în execuţie o singură dată pentru fiecare instrucţiune care modifică datele din tabela respectivă, nu pentru fiecare rând modificat. În aceste condiţii, nu are cum să existe o funcţie de genul "last modified" (care ar returna un singur rând), pentru că trebuie să ne precizeze toate rândurile modificate; deci singura modalitate de a afla rândurile modificate este să folosim pseudo-tabelele inserted şi deleted.

    Pentru a face legătura dintre inserted şi tabela noastră este esenţial să existe o cheie unică (altfel am putea să credem că s-au modificat mai multe rânduri decât s-au modificat în realitate). Dacă nu există nicio cheie unică, atunci cel mai simplu este să creăm o coloană de tip int cu atributul IDENTITY (având un nume prestabilit, de exemplu TheID). Dacă există o cheie unică, dar nu ştim care este, am putea să o căutăm în sysindexes, dar e relativ complicat, pentru că am putea găsi o cheie unică formată din mai multe coloane (eventual, am putea simplifica problema căutând doar indecşi care au keycnt=1).

    Răzvan

  •  05-23-2008, 4:20 PM 5027 in reply to 4868

    Re: Problema creare trigger

    Multumesc mult de raspuns. Eram foarte prins atunci cand mi l-ati dat si l-am implementat pe loc. A mers de a doua zi ! :D Scuze ca multumirile mele vin ata de tarziu, insa am fost foarte prins .

                              Stefan
View as RSS news feed in XML
Powered by Community Server (Commercial Edition), by Telligent Systems