/ Forside / Teknologi / Udvikling / SQL / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
SQL
#NavnPoint
pmbruun 1704
niller 962
fehaar 730
Interkril.. 701
ellebye 510
pawel 510
rpje 405
pete 350
gibson 320
10  smorch 260
Tjekke om der er indsat en ny post
Fra : Maxi


Dato : 25-03-04 15:29

Hej
Jeg vil høre hvordan jeg kunne tjecke om der bliver indsat noget i
databasen. Det er meningen at fra en ASPX side skal jeg kalde en funktion
hver 30 sek tjecker om der er indsæt noget.
Hvordan kan jeg lave SQL'en??

Hvis jeg har en database struktur som følgende og der tjeckes om der bliver
indsæt noget i kommentar.

Tabel1
ID
Kommenatar
Oprettet




 
 
Jens Gyldenkærne Cla~ (25-03-2004)
Kommentar
Fra : Jens Gyldenkærne Cla~


Dato : 25-03-04 15:40

Maxi skrev:

> Jeg vil høre hvordan jeg kunne tjecke om der bliver indsat
> noget i databasen.

Hvor sker indsættelsen fra? Du kan godt lave en kode der tjekker
for sidste indsættelse eller evt. om der er sket indsættelser inden
for de sidste x minutter, men det vil være mere effektivt at få
indsættelseskoden til at generere en besked.

> Det er meningen at fra en ASPX side skal
> jeg kalde en funktion hver 30 sek tjecker om der er indsæt
> noget. Hvordan kan jeg lave SQL'en??

Du kan enten tage den sidst oprettede post og se hvor gammel den
er:

SELECT TOP 1 DateDiff(s, oprettet, GETDATE()) as diff
FROM tabel1
ORDER BY oprettet DESC

(giver antallet af sekunder fra sidste oprettelse til nu)


- eller også kan du undersøge om der er poster nyere end et givent
tidspunkt:

SELECT COUNT(*) as antal
FROM enheder
WHERE DateDiff(s, oprettet, GETDATE()) < 30

(giver antallet af poster oprettet inden for de sidste 30
sekunder).
--
Jens Gyldenkærne Clausen
Svar venligst under det du citerer, og citer kun det der er
nødvendigt for at forstå dit svar i sammenhængen. Se hvorfor og
hvordan på http://usenet.dk/netikette/citatteknik.html

Maxi (25-03-2004)
Kommentar
Fra : Maxi


Dato : 25-03-04 15:59

> Hvor sker indsættelsen fra?

Indsættelsen sker også fra en ASPX siden.

> SELECT COUNT(*) as antal
> FROM enheder
> WHERE DateDiff(s, oprettet, GETDATE()) < 30

Den her sql ser ud til være præcis det som jeg skal bruge. Tak iøvrigt for
det hurtige svar.



Torben Frandsen (25-03-2004)
Kommentar
Fra : Torben Frandsen


Dato : 25-03-04 17:05

Maxi wrote:
>> Hvor sker indsættelsen fra?
>
> Indsættelsen sker også fra en ASPX siden.
>
>> SELECT COUNT(*) as antal
>> FROM enheder
>> WHERE DateDiff(s, oprettet, GETDATE()) < 30
>
> Den her sql ser ud til være præcis det som jeg skal bruge. Tak
> iøvrigt for det hurtige svar.

Har du mange klienter af gangen? I så fald ville jeg nok ikke vælge denne
metode, for den er ikke særlig effektiv med både GetDate() og DateDiff().
Hvis der kun kommer én forespørgsel hver 30. sekund, betyder det
selvfølgelig ikke så meget. Jeg har tilfældigvis netop skrevet en stored
procedure, som poller en tabel for nye rækker:

IF EXISTS(
SELECT ID
FROM Job
WHERE Found =0)

BEGIN
-- Make sure this caller doesn't get to race against another caller.
BEGIN TRAN
SELECT TOP 1 @GUID = ID FROM Job WITH (READPAST) WHERE Found = 0
UPDATE Job SET Found = 1, LastStatus = 'Found' WHERE ID = @GUID
COMMIT TRAN
RETURN 1
END
ELSE
RETURN 0

Det er også i denne sammenhæng værd at huske at et Index Seek er hurtigere
end et Index Scan, som er hurtigere end et Table Scan (med mindre du kun har
få rows og alt det der.)

Torben



Maxi (25-03-2004)
Kommentar
Fra : Maxi


Dato : 25-03-04 22:20

> Har du mange klienter af gangen? I så fald ville jeg nok ikke vælge denne
> metode, for den er ikke særlig effektiv med både GetDate() og DateDiff().
> Hvis der kun kommer én forespørgsel hver 30. sekund, betyder det
> selvfølgelig ikke så meget.

Jeg regner med at der ikke er særlig mange klienter af gangen. Omkring 5
styks online på en gang.

>Jeg har tilfældigvis netop skrevet en stored
> procedure, som poller en tabel for nye rækker:

>
> IF EXISTS(
> SELECT ID
> FROM Job
> WHERE Found =0)
>
> BEGIN
> -- Make sure this caller doesn't get to race against another caller.
> BEGIN TRAN
> SELECT TOP 1 @GUID = ID FROM Job WITH (READPAST) WHERE Found = 0
> UPDATE Job SET Found = 1, LastStatus = 'Found' WHERE ID = @GUID
> COMMIT TRAN
> RETURN 1
> END
> ELSE
> RETURN 0

Jeg vil så kigge lidt nærmere på denne stored procedure.



Søren Lund Jensen (25-03-2004)
Kommentar
Fra : Søren Lund Jensen


Dato : 25-03-04 16:00

Maxi wrote:

> Hej
> Jeg vil høre hvordan jeg kunne tjecke om der bliver indsat noget i
> databasen. Det er meningen at fra en ASPX side skal jeg kalde en
> funktion hver 30 sek tjecker om der er indsæt noget.
> Hvordan kan jeg lave SQL'en??
>
> Hvis jeg har en database struktur som følgende og der tjeckes om der
> bliver indsæt noget i kommentar.
>
> Tabel1
> ID
> Kommenatar
> Oprettet

Hvad skal det bruges til? Hvis det er til at opdatere et andet sted i
DB, skal du nok have fat i en TRIGGER.

Maxi (25-03-2004)
Kommentar
Fra : Maxi


Dato : 25-03-04 22:22

> Hvad skal det bruges til? Hvis det er til at opdatere et andet sted i
> DB, skal du nok have fat i en TRIGGER.

Det skal bruges til en til ASPX applikation, og det er meningen når en
bruger logger på så skal der undersøges om der er kommet nye indlæg i en
tabel. Og hvis der så skal der poppe en vindue op som i MSN, når der er en
som logger på.



Søg
Reklame
Statistik
Spørgsmål : 177558
Tips : 31968
Nyheder : 719565
Indlæg : 6408925
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste