![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 1 Pomógł: 0 Dołączył: 20.07.2010 Ostrzeżenie: (0%) ![]() ![]() |
Witam jestem na praktykach i mam pewne zadanie do wykonania jednak mecze sie z nim już dość długo i chyba jednak będę potrzebował pomocy
![]() Mianowicie posiadam Tabele z danymi: data - datetime kod - int duplikat - int Problem jest taki żeby trigger po wprowadzaniu nowego rekordu ustawiał w nim duplikat = 1 gdy w przeciągu ostatnich 24h pojawił się już dany kod. napisałem coś takiego: create trigger dbo.duplikaty on dbo.glowna after insert AS /*deklaracja zmiennych @kod - wprowadzany kod @data - wprowadzana data @data1 - wprowadzana data minus 1 dzien */ declare @kod int, @data datetime, @data1 datetime select @kod=inserted.kod from inserted select @data=inserted.data from inserted set @data1=dateadd(d, -1, @data) /* wyszukanie duplikatow kodu dla zakresu 24h wstecz */ update dbo.glowna set duplikat = 1 where @kod=kod and Data BETWEEN CONVERT(DATETIME, @data1, 102) AND CONVERT(DATETIME, @data, 102) Niestety ten trigger nie działa tak jakbym chciał mianowicie jako ze duplikat zmieniany jest po wprowadzeniu danych pierwszy rekord automatycznie jest duplikatem a tego nie chce i druga sprawa trigger stosuje sie do wszystkich danych na danym przedziale a nie tylko do nowo dodanego rekordu. Problem muszę jakoś rozwiązać nie musi to być trigger może źle się za to zabrałem? Pozdrawiam i z góry dziękuje za pomoc |
|
|
![]() |
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 87 Pomógł: 12 Dołączył: 31.05.2006 Ostrzeżenie: (0%) ![]() ![]() |
Witam,
Dwie zmiany w trigerze załatwią problem: w zapytaniu na update danych:
Rozwiązanie pierwszego problemu: -- warunek na to, czy w bazie jest więcej niż jeden rekord o danym kodzie and (select count(*) from glowna where @kod=kod) > 1 Rozwiązanie drugiego problemu: -- pobranie wiersza z najświeższą datą and data = (select max(data) from glowna where @kod=kod) Pozdrawiwam. |
|
|
![]() ![]() |
![]() |
Wersja Lo-Fi | Aktualny czas: 14.08.2025 - 03:55 |