none
Trigger su stesso record RRS feed

  • Domanda

  • SALVE

    Ho una tabella con una serie di campi

    Potete darmi una dritta di come scrivere un trigger

    Per mettere NELLA STESSA TABELLA quando si inserisce o si modifica un record

    MyTable:

    Col_1,

    Col_2,

    Col_3,

    TBCreated --> DateTime

    TBCreated_ID --> Int

    User_SQL --> VarChar(10)

    User_SQL_ID --> Int

    Host_PC --> VarChar(10)

    User_PC --> VarChar(10)

     

    TBModified -> DateTime

    TBModified_ID -> Int

     

    create trigger LogTrigger
    ON MyTable 
    FOR INSERT 
    as 
    INSERT INTO LogTable 
    (Col_1, Col_2, Col_3, TBCreated, TBCreated_ID, User_SQL, User_SQL_ID, Host_PC, User_PC) 
    select 
    Col_1, Col_2, Col_3, GETDATE(), User_ID(user_name), User_Name(), HOST_NAME(), ???? from inserted 

     

    SELECT HOST_NAME() AS HostName, SUSER_NAME() LoggedInUser

     

    UPDATE MyTable SET

    BigBag.BigBagData = Date(),

    BigBag.BigBagOra = Now();

     

    UPDATE MyTable SET
    TBCreated = GETDATE(), 
    TBCreated_ID = User_ID(user_name),
    User_SQL = User_Name(), 
    User_SQL_ID= User_ID(User_Name()),
    Host_PC =  HOST_NAME(), 
    User_PC) = ????
     

     

    SELECT HOST_NAME() AS HostName, SUSER_NAME() LoggedInUser

    Grazie anticipatamente
    giovedì 28 luglio 2016 09:39

Risposte

  • UPDATE MT
    SET TBCreated = GETDATE(), 
    TBCreated_ID = User_ID(user_name),
    User_SQL = User_Name(), 
    User_SQL_ID= User_ID(User_Name()),
    Host_PC =  HOST_NAME(), 
    User_PC = ????
    FROM MyTable AS MT
    INNER JOIN inserted AS INS
        ON MT.PK = INS.PK
    Questo dovrebbe metterti nella giusta direzione. Nel codice, PK sarebbe la primary key della tabella MyTable, qualunque essa sia.
    giovedì 28 luglio 2016 10:37

Tutte le risposte

  • Scusa, ma non riesco a capire bene qual è il tuo problema. Il codice che hai postato non è per nulla chiaro. Devi scrivere nella stessa tabella o in una tabella di log?
    giovedì 28 luglio 2016 10:17
  • vorrei scriver nello stesso record appena inserito i campi

    TBCreated = GETDATE(), 
    TBCreated_ID = User_ID(user_name),
    User_SQL = User_Name(), 
    User_SQL_ID= User_ID(User_Name()),
    Host_PC =  HOST_NAME(), 

    User_PC) = ????

    mentre nella tabella LogTable

    una indicazione di cosa fatto

    giovedì 28 luglio 2016 10:24
  • UPDATE MT
    SET TBCreated = GETDATE(), 
    TBCreated_ID = User_ID(user_name),
    User_SQL = User_Name(), 
    User_SQL_ID= User_ID(User_Name()),
    Host_PC =  HOST_NAME(), 
    User_PC = ????
    FROM MyTable AS MT
    INNER JOIN inserted AS INS
        ON MT.PK = INS.PK
    Questo dovrebbe metterti nella giusta direzione. Nel codice, PK sarebbe la primary key della tabella MyTable, qualunque essa sia.
    giovedì 28 luglio 2016 10:37
  • provo

    Grazie

    ma da SQL si riesce a sapere il nome dell'utente di windows?

    Grazie

    giovedì 28 luglio 2016 10:41
  • ma da SQL si riesce a sapere il nome dell'utente di windows?

    Certo, la funzione USER_NAME (che ha indicato Gianluca), o in alternativa la funzione CURRENT_USER restituiscono l'utente Windows in caso di accesso utilizzando la Windows Authentication.

    Ciao!


    Sergio Govoni

    Data Platform MVP | MVP Profile | English Blog | Twitter | LinkedIn 

    domenica 31 luglio 2016 23:10
    Moderatore