Ancora sulle date.......

giovedì 29 giugno 2006 - 11.10

bluland Profilo | Guru

salve ecco il quesito:

ho una tabella dove ci sono 2 campi data, (data1 e data2), vorrei che al momento dell'inserimento il campo data1 venisse automanticamente riempito con la data di sistema e per questo ho usato getdate() come default value, inoltre in questo primo inserimento data2 deve rimanere vuoto. In un secondo momento solo il campo data2 deve essere riempito sempre pero' con la data di sistema, il problema e' che se imposto anche data2 con getdate(), questo si riempira' gia' al primo inserimento mentre io vorrei che al secondo inserimento/modifica si riempia restando uguali il resto dei campi.
spero di essermi spiegato..

qualche idea?

saluti ENzo

micto27 Profilo | Senior Member

>ho una tabella dove ci sono 2 campi data, (data1 e data2), vorrei
>che al momento dell'inserimento il campo data1 venisse automanticamente
>riempito con la data di sistema e per questo ho usato getdate()
>come default value, inoltre in questo primo inserimento data2
>deve rimanere vuoto. In un secondo momento solo il campo data2
>deve essere riempito sempre pero' con la data di sistema, il
>problema e' che se imposto anche data2 con getdate(), questo
>si riempira' gia' al primo inserimento mentre io vorrei che al
>secondo inserimento/modifica si riempia restando uguali il resto
>dei campi.
>spero di essermi spiegato..

io ho una situazione molto simile a quella che hai descritto, una colonna DateTime che registra
l'inserimento in tabelle e una che registra l'ultima modifica.
Questa seconda colonna viene aggiornata da un TRIGGER definito sugli statements di UPDATE

CREATE trigger mioTrigger on dbo.TabellaX FOR UPDATE AS
...............
...............

Ciao, Michele


bluland Profilo | Guru

ok ci sono, non va del tutto bene questa soluzione ti spiego il perche con un esempio:

ho i campi:
prodotto, matricola, data_entrata, data_uscita

faccio l'inserimento e riempio il campo: prodotto, matricola, data_entrata,

poi di questi campi in seguito può capitare anche di fare una modifica, anche se ciò avvenisse il campo data_uscita deve cmq restare vuoto.

il campo data_uscita verrà riempito con la data del sistema solo quando lo si deciderà di riempire, quindi se creo il trigger per update appena faccio una modifica (magari perche ho sbagliato l'inserimento) anche il campo data_uscita si riempira', in effetti questo campo deve solo indicare l'uscita del prodotto e quindi deve essere indipendente dal resto dei campi in un certo senso!!!!
che ne dici idee? spero di essermi spiegato......, forse dovrei fare 2 tabelle separate?? tu che mi consigli?

saluti
Enzo

micto27 Profilo | Senior Member

>ok ci sono, non va del tutto bene questa soluzione ti spiego
>il perche con un esempio:
>
>ho i campi:
> prodotto, matricola, data_entrata, data_uscita
>
>faccio l'inserimento e riempio il campo: prodotto, matricola,
>data_entrata,
>
>poi di questi campi in seguito può capitare anche di fare una
>modifica, anche se ciò avvenisse il campo data_uscita deve cmq
>restare vuoto.
>
>il campo data_uscita verrà riempito con la data del sistema solo
>quando lo si deciderà di riempire, quindi se creo il trigger
>per update appena faccio una modifica (magari perche ho sbagliato
>l'inserimento) anche il campo data_uscita si riempira', in effetti
>questo campo deve solo indicare l'uscita del prodotto e quindi
>deve essere indipendente dal resto dei campi in un certo senso!!!!
>che ne dici idee? spero di essermi spiegato......, forse
>dovrei fare 2 tabelle separate?? tu che mi consigli?
>
>saluti
>Enzo
>

Ok, però allora, se l'update deve esplicito vuol dire che, quando ti serve,
dovrai eseguire un apposito comando del tipo

"UPDATE tabella set Data = getdate() where ......."

Ciao, Michele

bluland Profilo | Guru

in questo modo modificherei solo il campo data2 soltanto?? e se facessi un modifica degli altri campi il campo data2 rimarrebbe sempre invariato?

micto27 Profilo | Senior Member

>in questo modo modificherei solo il campo data2 soltanto?? e
>se facessi un modifica degli altri campi il campo data2 rimarrebbe
>sempre invariato?

Mi sfugge una cosa:
tu al limite puoi dover modificare anche solo Data2 oppure comunque la modifica di Data2
dipende dal fatto che si modifichino certi dati?

Potresti ad esempio configurare 2 diversi command, uno con e uno senza il "pezzetto" Data2=getdate() ed eseguire
uno o l'altro:

a) cmd1.CommandText = "UPDATE tabella set Col1 = @p1, Col2 = @p2, ...., Coln = @pn, Data2 = getdate() where ......."
b) cmd2.CommandText = "UPDATE tabella set Col1 = @p1, Col2 = @p2, ...., Coln = @pn where ......."

Se la modifica di Data2 fosse dipendente dalla modifica di altre colonne allora
potrebbe rientrare in gioco anche il TRIGGER da condizionare al fatto che siano oggetto di UPDATE
determinate colonne e non sia oggetto di UPDATE la colonna Data2 stessa.
Ad esempio condizionando Data2 alla modifica di Col2 o Col3 potresti pilotare il trigger in modo che:

UPDATE tabella SET Col1 = @p1 WHERE .... --> No aggiornamento Data2 (in quanto nessuna delle colonne stabilite è stata modificata)
UPDATE tabella SET Col1 = @p1, Col2= @p2, ..... WHERE .... --> Si aggiornamento Data2 (in conseguenza modifica Col1)
UPDATE tabella SET Col1 = @p1, Col2= @p2, Data2=@p3 WHERE .... --> No aggiornamento Data2 (in quanto aggiornata esplicitamente dal command)

Eventualmente, un vantaggio del trigger potrebbe essere quello che, l'aggiornamento del dato Data2 sarebbe "coerente"
anche se effettuato "zampettando" direttamente sui dati, al di fuori del controllo dato dall'applicazione.

Ciao, Michele

bluland Profilo | Guru

no mi sa che devo fare l'update solo di Data2=getdate() cioe' il primo modo poiche questo data2 deve essere indipendente dagli altri penso che cosi dovrebbe funzionare

grazie
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2023
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5