Как я могу создать хранимую процедуру для таблицы журнала - PullRequest
1 голос
/ 25 ноября 2011

Я ищу ответ для создания хранимой процедуры для таблицы журнала.Ниже приведен сценарий, для которого мне нужно написать этот SP.

Всякий раз, когда пользователь входит в систему или выходит из системы, сохраняйте время входа и выхода с уникальным идентификатором пользователя.необходимо запретить пользователю вход в систему, если предыдущий сеанс пользователя был прерван ненормально или пользователь закрыл приложение без надлежащего выхода из системы, то пользователю необходимо подождать 10 минут перед следующим входом в систему.*

ALTER PROCEDURE USP_CHECKER(@LOGINID VARCHAR(70))
AS
 BEGIN
    DECLARE @LASTID INT,@CURRENTTIME DATETIME,@TEMP INT,@HAS VARCHAR(30)
    SELECT TOP 1 SLNO, @TEMP=(DATEDIFF(MI,LOGINDATETIME,GETDATE()))  FROM TBL_LOGINDETAILS ORDER BY SlNo DESC

    SET @HAS=(SELECT LoginID FROM TBL_LOGINDETAILS WHERE LogoutDateTime IS NULL)
  IF @HAS IS NOT NULL
    BEGIN 
    IF(@TEMP >= '10' )
      BEGIN   
       SET @CURRENTTIME = (SELECT DATEADD(MI, -10, GETDATE())) 
       UPDATE  TBL_LOGINDETAILS SET LogoutDateTime=@CURRENTTIME WHERE SLNO=@LASTID
      END
  ELSE
    RETURN @LASTID  
   --PREVENT FROM LOGIN 
  END 
  ELSE
    INSERT INTO TBL_LOGINDETAILS (LoginID,LoginDateTime,isLogged) VALUES(@LOGINID,GETDATE(),'1')   
END

Ответы [ 2 ]

2 голосов
/ 25 ноября 2011

Единственное, что бросается в глаза, это то, что у вас есть переменная с именем @TEMP типа INT - но вы сравниваете ее, как если бы это была строка:

IF(@TEMP >= '10' )   -- unnecessary single quotes! You're comparing against a string literal...
BEGIN   
       SET @CURRENTTIME = (SELECT DATEADD(MI, -10, GETDATE())) 
       UPDATE  TBL_LOGINDETAILS SET LogoutDateTime=@CURRENTTIME WHERE SLNO=@LASTID
END

Это INT- поэтому вам нужно сравнить его с числовым значением:

IF(@TEMP >= 10)  -- **NO** unnecessary single quotes....
BEGIN   
   UPDATE dbo.TBL_LOGINDETAILS 
   SET LogoutDateTime = DATEADD(MI, -10, GETDATE())
   WHERE SLNO = @LASTID
END

Также - я уверен вы можете найти более подходящее, более значимое и более очевидное имя для этой переменной, чем@TEMP ....

1 голос
/ 28 ноября 2011

это то, что я пытался.

        USE [DB]
GO
/****** Object:  StoredProcedure [dbo].[USP_SetLoginStatus]    Script Date: 11/28/2011 10:58:47 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- =============================================
ALTER PROCEDURE [dbo].[USP_SetLogStatus] 
    -- Add the parameters for the stored procedure here
        @PLoginName     Varchar(75)
AS
BEGIN
   DECLARE @SNO INT    --VARIABLE TO HOLD THE SERAIL NUMBER
   ,@ISLOGGED BIT       --HOLDING IS LOGGED STATUS 
   ,@TIMEDIFF VARCHAR(50) --VARIABLE TO HOLD TIME DIFFERENCE BETWEEN CURRENT LOGIN AND LAST LOG OUT TIME

    -- SELECT QUERY FOR GETTING @TIMEDIFF AND SERIAL-NO VALUES FOR USER

     SELECT @SNO=[SlNo],@ISLOGGED=[isLogged] ,@TIMEDIFF =DATEDIFF(MI,
     (SELECT TOP (1) [LoginDateTime] FROM TBL_LOGINDETAILS WHERE [LogoutDateTime] IS NULL ORDER BY [SlNo] ),
     GETDATE()) FROM TBL_LOGINDETAILS WHERE [LoginID]=@PLoginName

    --IF USER IS LOGIN FIRST TIME 

    IF NOT EXISTS( SELECT isLogged FROM TBL_LOGINDETAILS WHERE [LoginID]=@PLoginName)  
     INSERT INTO TBL_LOGINDETAILS(LoginID,isLogged,LoginDateTime) VALUES(@PLoginName,'1',GETDATE()) 
    ELSE 
    BEGIN 
      IF (@TIMEDIFF >=10) --LOGOUT TIME DIFF IS MORE THAN OR EQUALS TO 10 MINUTE 

   BEGIN
      ----- UPDATING LOGOUT AND IS LOGGED FIELD
       IF(@ISLOGGED =1 )
        BEGIN
          UPDATE  TBL_LOGINDETAILS SET [LOGOUTDATETIME]= (SELECT DATEADD(MI, -10, GETDATE()) ), [isLogged]=0 WHERE [LoginID]=@PLoginName
          AND [SlNo]=@SNO

      ----- INSERTING NEW LOG FOR CURRENT USER

         INSERT INTO TBL_LOGINDETAILS([LoginID],[LoginDateTime],[isLogged]) VALUES(@PLoginName,GETDATE(),1)
        END
     ELSE
       UPDATE  TBL_LOGINDETAILS SET [LOGOUTDATETIME]= GETDATE() , [isLogged]=0 WHERE [LoginID]=@PLoginName AND [SlNo]=@SNO
    END  
  ELSE

    RETURN '0'  
    END

END
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...