Ho una tabella contenente due colonne not null
Created
e Updated
.Attivazione dopo l'inserimento nella colonna non nulla
ho scritto corrispondente trigger
ALTER TRIGGER [dbo].[tr_category_inserted] ON [dbo].[Category]
AFTER INSERT
AS
BEGIN
UPDATE Category
SET Created = GETDATE(), Updated = GETDATE()
FROM inserted
WHERE Category.ID = inserted.ID;
END
e
ALTER TRIGGER [dbo].[tr_category_updated] ON [dbo].[Category]
AFTER UPDATE
AS
BEGIN
UPDATE Category
SET Updated = GETDATE()
FROM inserted
inner join [dbo].[Category] c on c.ID = inserted.ID
END
ma se io sono l'inserimento di una nuova riga ottengo un errore
Impossibile inserire il valore NULL nella colonna 'Creato ', tabella ' Categoria '; la colonna non consente null. INSERT fallisce.
comando Inserisci:
INSERT INTO [Category]([Name], [ShowInMenu], [Deleted])
VALUES ('category1', 0, 0)
Come posso scrivere tali trigger senza un'impostazione per queste colonne per permettere nulla?
Se si desidera aggiornare 'date' automaticamente su' insert', suggerisco di usare il vincolo 'default' invece di' triggers' – DON
Si verifica un errore perché il trigger funziona solo dopo l'inserimento e non è possibile inserire i valori della colonna 'Creato' e' Aggiornato' al momento dell'inserimento. – TechDo
Come dice già il trigger, il trigger si attiva ** DOPO ** l'inserimento è successo - ma è necessario fornire un ** valore ** su 'INSERT' per qualsiasi colonna' NOT NULL'. Quindi è necessario scrivere un trigger 'INSTEAD OF INSERT' per impostare il valore iniziale di tali colonne -o molto più facilmente: basta definire un vincolo' DEFAULT (GETDATE()) 'su quella colonna in modo che venga automaticamente riempito su' INSERT '.... –