Mam tabelę zawierającą dwie kolumny not null
Created
i Updated
.Wyzwalacz po wstawieniu na niezerowej kolumnie
pisałem odpowiadające wyzwala
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
i
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
ale jeśli jestem wstawienie nowego wiersza pojawia się błąd
nie można wstawić wartość NULL do kolumny „Utworzono ", tabela " Kategoria "; kolumna nie zezwala na wartości null. INSERT nie działa.
Wstaw polecenie:
INSERT INTO [Category]([Name], [ShowInMenu], [Deleted])
VALUES ('category1', 0, 0)
Jak mogę napisać takie wyzwalacze bez ustawienia do tych kolumn, aby umożliwić zerowy?
Jeśli chcesz automatycznie zaktualizować 'date' na' insert', sugeruję użycie ograniczenia 'default' zamiast' triggers' – DON
Błąd występujący, ponieważ trigger działa po wstawieniu i nie wstawiasz wartości kolumn 'Created' i' Updated' w momencie wstawienia. – TechDo
Ponieważ nazwa wyzwalacza już jest napisana, wyzwalacz uruchamia się ** PO ** wydaniu wstawienia - ale musisz podać ** wartość ** na "INSERT" dla dowolnej kolumny "NOT NULL". Musisz więc napisać wyzwalacz 'INSTEAD OF INSERT', aby ustawić początkową wartość tych kolumn - o wiele łatwiej: po prostu zdefiniuj ograniczenie" DEFAULT (GETDATE()) "w tej kolumnie, tak aby automatycznie wypełniało się' INSERT '.... –