Avatar billede qqq Nybegynder
01. juli 2002 - 03:39 Der er 5 kommentarer og
2 løsninger

Stored procedure og date

Jeg har en onlineliste som gemmes i en tabel med login tidspunktet. Jeg sletter brugere der har været online mere end en bestemt tid fra listen igen med nedenstående asp:

maxOnline = 1 'Angives i dage.
sDate = GetDateTimeNew(Now()-MaxOnline)
sSQL = "DELETE FROM online_liste WHERE LoginTime < '" & sDate & "'"
cn.execute(sSQL)


GetDateTimeNew funktionen ser ud som følger:

Function GetDateTimeNew(sDate)
if sDate = "" then sDate = Now()

    DD = Day(sDate)
    MM = Month(sDate)
    AAAA = Year(sDate)
    T1 = Hour(sDate)
    T2 = Minute(sDate)
    T3 = Second(sDate)
   
    If Len(DD) = 1 Then DD = 0 & DD
    If Len(MM) = 1 Then MM = 0 & MM
    If Len(T1) = 1 Then T1 = 0 & T1
    If Len(T2) = 1 Then T2 = 0 & T2
    If Len(T3) = 1 Then T3 = 0 & T3
GetDateTimeNew = AAAA & MM & DD & T1 & T2 & T3
End Function

Dette virker så fint nok, men da jeg gerne vil automatisere det, så jeg slipper for at sidde og trykke på en knap flere gange om dagen, vil jeg gerne lave et scheduleret job der kører en stored procedure som dermed sletter fra onlinelisten. Men hvordan skal denne stored procedure se ud? Jeg vil dog gerne have at maxOnline er angivet i timer i stedet for i dage.

Håber der er nogen der kan hjælpe med dette. Hvis der er spørgsmål, så kom endelig med dem.

CREATE PROCEDURE nsp_ClearUsers
AS
DELETE FROM online_liste WHERE LoginTime < variabel
GO
Avatar billede ocp Nybegynder
01. juli 2002 - 09:45 #1
Noget i denne stil?:

CREATE PROCEDURE nsp_ClearUsers
    @maxonline int
AS
    declare @lastdate datetime
    set @lastdate = dateadd( hour, -1 * @maxonline, getdate() )

    DELETE FROM online_liste WHERE LoginTime < @lastdate
GO
Avatar billede qqq Nybegynder
01. juli 2002 - 12:14 #2
Hej ocp, det ser ret lovende ud, men får følgende fejl:

Server: Msg 241, Level 16, State 1, Procedure nsp_ClearUsers, Line 7
Syntax error converting datetime from character string.

LoginTime er af databatype char(14) og ser f.eks således ud, hvis det skulle have nogen betydning: 20020701115102
Avatar billede ocp Nybegynder
01. juli 2002 - 13:10 #3
Aha... hvorfor i alverden er der benyttet et tekstfelt?
Avatar billede ocp Nybegynder
01. juli 2002 - 13:12 #4
Så må du benytte samme fremgangsmåde som i den vb-kode:

declare @year int

set @year = datepart(yyyy, @lastdate)

Og så videre...
Avatar billede ocp Nybegynder
01. juli 2002 - 13:13 #5
Fejlen skyldes at det kan ikke lade sig gøre at sammeligne en date med en streng direkte.
Avatar billede bennytordrup Nybegynder
03. juli 2002 - 12:40 #6
CREATE PROCEDURE nsp_ClearUsers
    @maxonline int
AS
    declare @lastdate datetime
    set @lastdate = dateadd( hour, -1 * @maxonline, getdate() )

    DELETE FROM online_liste WHERE LoginTime < convert(nvarchar, @lastdate, 112) + replace(convert(nvarchar, @lastdate, 108), ':', '')
Avatar billede qqq Nybegynder
04. juli 2002 - 01:59 #7
Tak til jer begge..
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Computerworld tilbyder specialiserede kurser i database-management

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester