Trigger w sql server

0

Witam

mój problem polega na tym że chce stworzyć takiego triggera który automatycznie doda godzinę wprowadzenia rekordu do bazy.

mam coś takiego

CREATE TRIGGER czas ON dbo.Baza_grunt
AFTER insert
as

begin
	--INSERT INTO Baza_grunt(ID,czas_wprowadzenia) values (7,SYSDATETIME());
	Update Baza_grunt set czas_wprowadzenia=SYSDATETIME() where ID = 7 ;
end

i problem jest z ID, bo muszę podać, a nie wiem jak. W sensie żeby nie było na stałe wpisane, bo to bez sensu. Mam dwie wersje, ale w obu trzeba podać wartość ID, a ja nie chce tego robić, ewentualnie żeby automatycznie się zczytało albo po prostu dodało się do wprowadzanego rekordu.

dane wprowadzam tradycyjnie: INSERT INTO dbo.Baza(ID,wartosc) VALUES (10,10) i chce żeby w kolejnej kolumnie (istniejącej) była godzina.

mógłby ktoś pomóc?

0

Pobierz ID z tabeli inserted, którą masz dostępną w triggerze.

0
CREATE TRIGGER czas ON dbo.Baza
AFTER insert
as
declare 
@id1 INT;

begin
	PRINT 'Test'
	SELECT ID as id1 FROM inserted;
	INSERT INTO Baza(ID,czas_wprowadzenia) values (id1,SYSDATETIME());
	--Update Baza_grunt set czas_wprowadzenia=SYSDATETIME() where ID = ID ;
end

stworzyłem takie coś, ale nie działa

tak informacyjnie: jestem trochę zielony w temacie, dopiero się uczę

1

Ale nie wstawiaj drugiego rekordu o tym samym ID, tylko updatuj ten istniejący.

0

Dla potomnych:

CREATE TRIGGER czas ON dbo.Baza
AFTER insert
as
begin
	Update Baza set czas_wprowadzenia=SYSDATETIME() where ID = (select ID from inserted)
end

Moim problemem było myślenie jak w C++, jak nadam zmiennej wartość to już taka ma zawsze. A w sql jest przecież inaczej

Dzięki za pomoc.

0

Jasne że można, to taki skrót myślowy

2

Ten twój cały trigger jest niepotrzebny. Wystarczy wartość domyślna

0

a nie prościej zrobić trigger BEFORE INSERT i tam podmienić wartość wstawianego pola jedynie???

1 użytkowników online, w tym zalogowanych: 0, gości: 1