Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Trigger problem
Songok
post 20.07.2010, 18:53:20
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 smile.gif

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
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 1)
trafas
post 29.01.2011, 00:17:49
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:

  1. UPDATE dbo.glowna
  2. SET duplikat = 1
  3. WHERE @kod=kod
  4. AND DATA BETWEEN CONVERT(DATETIME, @data1, 102) AND CONVERT(DATETIME, @DATA, 102)
  5. AND (SELECT count(*) FROM glowna WHERE @kod=kod) > 1
  6. AND DATA = (SELECT max(DATA) FROM glowna WHERE @kod=kod)



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.
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 14.08.2025 - 03:55