>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...
Quello che tu hai definito in data1 non è altro che un constraint DEFAULT.
Questo constraint entra in causa quando esegui il comando INSERT nel caso non abbia specificato in modo esplicito un valore per quella colonna.
Ad ogni successiva modifica il constraint non ha più alcun effetto.
>...mentre io vorrei che al
>secondo inserimento/modifica si riempia restando uguali il resto
>dei campi.
Non esiste alcun secondo inserimento, al più una modifica (UPDATE/DELETE).
Se data2 deve contenere la data di modifica della riga, puoi utilizzare un trigger:
USE tempdb
GO
/* Creo la tabella dbo.Students */
CREATE TABLE dbo.Students(
StudentID int NOT NULL IDENTITY PRIMARY KEY,
FirstName varchar(10) NOT NULL,
LastName varchar(10) NOT NULL,
DateInserted datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
DateModify datetime NULL
);
GO
/* Definisco il trigger dbo.tr_StudentsSetLastModify */
CREATE TRIGGER dbo.tr_StudentsSetLastModify
ON dbo.Students
FOR UPDATE
AS
UPDATE dbo.Students
SET DateModify = CURRENT_TIMESTAMP
FROM dbo.Students S JOIN INSERTED I
ON S.StudentID = I.StudentID;
GO
/* Popolo la tabella */
SET NOCOUNT ON;
INSERT dbo.Students(FirstName, LastName)
VALUES('Lorenzo', 'Benaglia');
WAITFOR DELAY '000:00:5';
INSERT dbo.Students(FirstName, LastName)
VALUES('Luca', 'Bianchi');
WAITFOR DELAY '000:00:8';
INSERT dbo.Students(FirstName, LastName)
VALUES('Gianluca', 'Hotz');
SET NOCOUNT OFF;
GO
/* Vediamo */
SELECT *
FROM dbo.Students;
GO
/* Output:
StudentID FirstName LastName DateInserted DateModify
----------- ---------- ---------- ----------------------- -----------------------
1 Lorenzo Benaglia 2006-06-29 11:52:43.980 NULL
2 Luca Bianchi 2006-06-29 11:52:49.000 NULL
3 Gianluca Hotz 2006-06-29 11:52:57.000 NULL
(3 row(s) affected)
*/
/* Aggiorno tutte le righe della tabella */
UPDATE dbo.Students
SET FirstName = 'Pippo';
GO
/* Vediamo */
SELECT *
FROM dbo.Students;
GO
/* Output:
StudentID FirstName LastName DateInserted DateModify
----------- ---------- ---------- ----------------------- -----------------------
1 Pippo Benaglia 2006-06-29 11:52:43.980 2006-06-29 11:53:33.187
2 Pippo Bianchi 2006-06-29 11:52:49.000 2006-06-29 11:53:33.187
3 Pippo Hotz 2006-06-29 11:52:57.000 2006-06-29 11:53:33.187
(3 row(s) affected)
*/
/* Aggiorno solo una riga */
UPDATE dbo.Students
SET FirstName = 'Lorenzo'
WHERE StudentID = 1;
GO
/* Vediamo */
SELECT *
FROM dbo.Students;
GO
/* Output:
StudentID FirstName LastName DateInserted DateModify
----------- ---------- ---------- ----------------------- -----------------------
1 Lorenzo Benaglia 2006-06-29 11:52:43.980 2006-06-29 11:54:00.903
2 Pippo Bianchi 2006-06-29 11:52:49.000 2006-06-29 11:53:33.187
3 Pippo Hotz 2006-06-29 11:52:57.000 2006-06-29 11:53:33.187
(3 row(s) affected)
*/
/* Pulizia */
DROP TABLE dbo.Students;
>saluti ENzo
Ciao!
--
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://blogs.dotnethell.it/lorenzo/
http://italy.mvps.org