Trigger w sql server

Trigger w sql server
GR
  • Rejestracja:ponad 9 lat
  • Ostatnio:ponad 6 lat
  • Postów:14
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

Kopiuj
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?

somekind
Moderator
  • Rejestracja:około 17 lat
  • Ostatnio:4 dni
  • Lokalizacja:Wrocław
0

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

GR
  • Rejestracja:ponad 9 lat
  • Ostatnio:ponad 6 lat
  • Postów:14
0
Kopiuj
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ę

somekind
Moderator
  • Rejestracja:około 17 lat
  • Ostatnio:4 dni
  • Lokalizacja:Wrocław
1

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

GR
  • Rejestracja:ponad 9 lat
  • Ostatnio:ponad 6 lat
  • Postów:14
0

Dla potomnych:

Kopiuj
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.

HI
A to w C++ nie można zmienić wartości zmiennej ;) ?
GR
  • Rejestracja:ponad 9 lat
  • Ostatnio:ponad 6 lat
  • Postów:14
0

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

Marcin.Miga
  • Rejestracja:prawie 17 lat
  • Ostatnio:około 5 godzin
  • Postów:2792
2

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

abrakadaber
abrakadaber
ale wtedy musisz pilnować, żeby nikt w insercie nie wstawiał tego pola do bazy
abrakadaber
abrakadaber
  • Rejestracja:ponad 12 lat
  • Ostatnio:8 miesięcy
  • Postów:6610
0

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


Chcesz pomocy - pokaż kod - abrakadabra źle działa z techniką.

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.