in

UGISS Community

Il sito della community dello User Group Italiano di SQL Server

SCRIPT AGGIORNA STORICO

Last post 07-15-2007 23.26 by stepic77. 11 replies.
Page 1 of 1 (12 items)
Sort Posts: Previous Next
  • 07-05-2007 10.30

    • stepic77
    • Top 25 Contributor
      Male
    • Joined on 06-04-2007
    • viterbo
    • Posts 44
    • Points 730

    SCRIPT AGGIORNA STORICO

    Ciao a tutti,

    vorrei creare uno "script di aggiorna storico" dentro una stored che, dopo aver eseguito delle istruzione (insert, update e delete con relativi parametri), mi aggiorni una tabella di storico


    In pratica eseguendo il comando nella stored

    insert into tabA (id, nome, cognome) values (@id, @nome, @cognome)
    -- SCRIPT AGGIORNA STORICO

     

    il mio script dovrò inserire sulla tabella storico l'istruzione appena generata
    ---------------------------------------------------------------------------------------------------------------
    |data      |  script                                                                                       |
    ---------------------------------------------------------------------------------------------------------------
    |05-07-07|  insert into tabA (id, nome, cognome) values (1, 'pippo', 'pippo')      |
    ---------------------------------------------------------------------------------------------------------------

    è possibile in TSQL?

    • Post Points: 20
  • 07-05-2007 11.58 In reply to

    • dmauri
    • Top 10 Contributor
      Male
    • Joined on 05-14-2007
    • Novate Milanese
    • Posts 1.179
    • Points 15.440

    Re: SCRIPT AGGIORNA STORICO

    Ciao stepic77 

    è possibile si...quello che ti chiedo, però, prima di darti una risposta e lo scopo di questa tua richiesta?

    Ti serve per poter "ricostruire" il database in caso di problemi, o come meccanismo di auditing?

    Ah, stai usando SQL Server 2000 o 2005? 

    Davide Mauri
    Microsoft MVP - SQL Server, MCP, MCAD, MCDBA, MCT - http://www.davidemauri.it
    Socio Fondatore e Mentor di Solid Quality Learning Italy - http://www.solidq.com
    Presidente di UGISS: User Group Italiano Sql Server - http://www.ugiss.org
    • Post Points: 20
  • 07-05-2007 13.33 In reply to

    • stepic77
    • Top 25 Contributor
      Male
    • Joined on 06-04-2007
    • viterbo
    • Posts 44
    • Points 730

    Re: SCRIPT AGGIORNA STORICO

    Ciao Davide e scusa la mia "inchiarezza" :D

    Lo scopo:
    Non avendo una struttura su Internet (un vero e proprio sito web), faccio la manutenzione del DB in locale (insert, update, delete). Vorrei creare una patch di aggiornamento per tutti i database che non ho nel mio pc, risalendo dalle operazioni precedentemente effettuate.

     
    Ambiente:
    Server : SQLSERVER 2005 SP2

    Buon pranzo ;-)
     


    • Post Points: 20
  • 07-05-2007 14.19 In reply to

    • dmauri
    • Top 10 Contributor
      Male
    • Joined on 05-14-2007
    • Novate Milanese
    • Posts 1.179
    • Points 15.440

    Re: SCRIPT AGGIORNA STORICO

    Capito :-)

    Per i dati, allora, puoi utilizzare un tool (free) come questo:

    http://www.sqlscripter.com/

    che genera lo script necessario per sincronizzare i dati tra due database.

    Per quanto riguarda invece la sincronizzazione degli schema puoi usare

    SQL Compare della RegGate:

    http://www.red-gate.com/products/SQL_Compare/features.htm

    oppure

    SQL Diff della ApexSQL:

    http://www.apexsql.com/sql_tools_diff.asp 

    In entrambi i casi ricordati di specificare che sei un membro di UGISS, ti faranno uno sconto di almeno il 10%.

    A titolo informativo, volendo, è possibile anche creare un sistema di "logging" tramite trigger DDL e DML che ti permetta di fare quello di cui hai bisogno...ma è una fatica non da poco e non credo che il gioco valga la candela visto il prezzo dei tool che ti hi citato Smile 

    Davide Mauri
    Microsoft MVP - SQL Server, MCP, MCAD, MCDBA, MCT - http://www.davidemauri.it
    Socio Fondatore e Mentor di Solid Quality Learning Italy - http://www.solidq.com
    Presidente di UGISS: User Group Italiano Sql Server - http://www.ugiss.org
    • Post Points: 20
  • 07-05-2007 15.44 In reply to

    • stepic77
    • Top 25 Contributor
      Male
    • Joined on 06-04-2007
    • viterbo
    • Posts 44
    • Points 730

    Re: SCRIPT AGGIORNA STORICO

    Ahimè!! Credo che nn sia possibile utilizzare uno dei tools da te citati... Crying sia perchè nel mio caso solamente alcune righe di alcune tabelle devono essere modificate (dipende dai parametri passati alle stored...), sia perchè non ho l'accesso al DB "esterno" (in tal proposito pensavo di pubblicare online le patch da scaricare, praticamente gli script personalizzati da me con tutte le insert, update e delete).

    Dovrei riuscire ad individuale l'intera riga di esecuzione del DB (completa di valori) e salvarla.

    Aiuto Davide

    • Post Points: 20
  • 07-05-2007 16.06 In reply to

    • dmauri
    • Top 10 Contributor
      Male
    • Joined on 05-14-2007
    • Novate Milanese
    • Posts 1.179
    • Points 15.440

    Re: SCRIPT AGGIORNA STORICO

    mmm...devo ammettere che non mi è molto chiara la situazione, cmq non è un problema Smile con SQL Server 2005 puoi utilizzare le funzionalità fornite dall'opzione OUTPUT:

    create table dbo.Test1
    (
        id int not null primary key,
        valore_a varchar(10) not null,
        valore_b varchar(10) not null
    )
    go

    create table dbo.[Log]
    (
        exec_date datetime not null default(getdate()),
        statment nvarchar(max) not null
    )
    go

    insert into    dbo.Test1 (id, valore_a, valore_b)
    output getdate(), 'insert into    dbo.Test1 (id, valore_a, valore_b) values (' + cast(inserted.id as varchar(9))+ ',''' + inserted.valore_a + ''',''' + inserted.valore_b + ''')' into dbo.[Log]
    values (1, 'A', 'B')
    go

    select * from dbo.[Log]
    go


     

    Davide Mauri
    Microsoft MVP - SQL Server, MCP, MCAD, MCDBA, MCT - http://www.davidemauri.it
    Socio Fondatore e Mentor di Solid Quality Learning Italy - http://www.solidq.com
    Presidente di UGISS: User Group Italiano Sql Server - http://www.ugiss.org
    • Post Points: 20
  • 07-05-2007 17.39 In reply to

    • stepic77
    • Top 25 Contributor
      Male
    • Joined on 06-04-2007
    • viterbo
    • Posts 44
    • Points 730

    Re: SCRIPT AGGIORNA STORICO

    E' PERFETTO E FUNZIONA BENISSIMO!!!!
    Grazie Davide
    • Post Points: 20
  • 07-10-2007 9.49 In reply to

    Re: SCRIPT AGGIORNA STORICO

    Scusate se mi "appendo", ma per capire meglio il problema e la soluzione (cultura personale):

    in alcuni casi io ho creato un trigger sulla tabella al cui interno salvo in una tabella log la riga "inserted" o "deleted", avendo la precauzione che la tabella di log sia stata creata con una colonna dataora avente valore di default getdate().

    Cosa mi sfugge del problema proposto?  Quella da me descritta è una soluzione alternativa valida alla domanda "voglio avere un log di tutte le modifiche intervenute sulla tabella..."?

    grazie e ciao 

    • Post Points: 20
  • 07-10-2007 16.57 In reply to

    • dmauri
    • Top 10 Contributor
      Male
    • Joined on 05-14-2007
    • Novate Milanese
    • Posts 1.179
    • Points 15.440

    Re: SCRIPT AGGIORNA STORICO

    Mauro1068:

    Scusate se mi "appendo", ma per capire meglio il problema e la soluzione (cultura personale):

    No problem, il forum è fatto apposta per questo! Smile

     

    Mauro1068:

    in alcuni casi io ho creato un trigger sulla tabella al cui interno salvo in una tabella log la riga "inserted" o "deleted", avendo la precauzione che la tabella di log sia stata creata con una colonna dataora avente valore di default getdate().

     

    Si, è corretto.

     

    Mauro1068:

    Cosa mi sfugge del problema proposto?  Quella da me descritta è una soluzione alternativa valida alla domanda "voglio avere un log di tutte le modifiche intervenute sulla tabella..."?

    Beh, stepic77 nel suo post chiedeva esplicitamente che tutto avvenisse dentro una stored procedure Smile, altrimenti la tua soluzione va benone. 

     

    Mauro1068:

    grazie e ciao 

    Di nulla, ciao!!

     

    Davide Mauri
    Microsoft MVP - SQL Server, MCP, MCAD, MCDBA, MCT - http://www.davidemauri.it
    Socio Fondatore e Mentor di Solid Quality Learning Italy - http://www.solidq.com
    Presidente di UGISS: User Group Italiano Sql Server - http://www.ugiss.org
    • Post Points: 20
  • 07-14-2007 2.15 In reply to

    • stepic77
    • Top 25 Contributor
      Male
    • Joined on 06-04-2007
    • viterbo
    • Posts 44
    • Points 730

    Re: SCRIPT AGGIORNA STORICO

    Ciao ragazzi, scusate il ritardo  Wink
    Premesso che il trigger per i tracciare i log va benissimo, cerco di spiegare un po' meglio il mio (grazie Davide, "ex") problema.

    Calcoliamo di avere 2 database uguali, il primo è installato in una intranet/internet dove accede sia l'administrator per aggiornare i record delle tabelle master(*) sia l'utente pippo, il secondo è installato in una LAN dove accede solamente l'utente "pluto".

    ******************************************************************************************************************************************************************
    PROBLEMA : Tracciare le modifiche dell'administrator nella tabella master (gestite da stored) per allineare i database esterni prima del batch
    ******************************************************************************************************************************************************************

    (*) Tabelle master =  tabelle da cui creare (con un batch il primo giorno dell'anno) i modelli base (aggiornati dall'administrator) per gli utenti.
    (quindi nella stessa tabella avrò sia record inseriti dall'administrator sia dall'utente pippo)

     PS.Lo so è un po' contorto...

    • Post Points: 20
  • 07-15-2007 21.47 In reply to

    • dmauri
    • Top 10 Contributor
      Male
    • Joined on 05-14-2007
    • Novate Milanese
    • Posts 1.179
    • Points 15.440

    Re: SCRIPT AGGIORNA STORICO

    I modi per soddisfare una esigenza come questa sono molteplici:

    • Trigger
    • Log Shipping
    • Repliche
    • Script di sincronizzazione manuali
    • Integration Services
    • Tool di terze parti come SQL Compare o SQL Diff

    nel caso di stepic77, siccome tutto viene fatto attraverso un stored procedure una possibilità in più è quella dell'utilizzo della clausola OUTPUT.

    Io, normalmente, preferisco e consiglio l'utilizzo di Script di sincronizzazione manuali + Integration Services.

    Davide Mauri
    Microsoft MVP - SQL Server, MCP, MCAD, MCDBA, MCT - http://www.davidemauri.it
    Socio Fondatore e Mentor di Solid Quality Learning Italy - http://www.solidq.com
    Presidente di UGISS: User Group Italiano Sql Server - http://www.ugiss.org
    • Post Points: 20
  • 07-15-2007 23.26 In reply to

    • stepic77
    • Top 25 Contributor
      Male
    • Joined on 06-04-2007
    • viterbo
    • Posts 44
    • Points 730

    Re: SCRIPT AGGIORNA STORICO

    Ho scartato il log shipping ed i tools di terze parti perchè tutti i miei database sono uguali sulla struttura DDL e solamente per i dati inseriti dall'administrator. Quindi ho la necessità di creare una sorta di patch di allineamento per i nuovi dati inseriti dall'administrator stesso.
    Ho scartato i trigger perchè le stored (lavorando su tanti calcoli e modificando diverse tabelle) sono complesse ed aggiungere script sul triggers mi sembrava una scelta un po' azzardata....

    Con la scelta di Davide riesco ad avere uno storico da cui creare lo script di sincronizzazione manuali.

    PS. Integration Services nn lo conosco bene....

    • Post Points: 5
Page 1 of 1 (12 items)
(C) 2007 User Group Italiano di SQL Server