2015-08-25 30 views
0

我正在嘗試編寫一個存儲過程來驗證登錄。加入兩個表的MSSQL中的存儲過程

我有兩個表,它將保存下面給出的數據表結構。

Table : UserMaster

Userid Password IsActive 
1111 xyz  1 
2222 abc  0 

Table : Userdetailes

Userid Status StartDate EndDate 
1111  1  2015-08-01 2015-08-24 
2222  0  2015-08-01 2015-08-10 

這是如何將數據存儲在兩個表

我想寫一個存儲過程使用加入

+0

只使用基於業務邏輯簡單的選擇查詢,如果該查詢返回的結果可以讓用戶輸入,或否則只需使用輸出參數根據業務邏輯返回值。最好的想法是加入兩個表基於用戶名和檢查業務條件 –

+0

你能幫我的樣品,因爲它可以做到保持這種情況下記住 –

+0

請標記爲一個分貝,你使用MySQL或SQL服務器??? –

回答

1
查看數據

嘗試像這樣.....

CREATE PROCEDURE [dbo].[uspauth] 
    @LoginId  NVARCHAR(30) 
    ,@ActiveStatus INT OUTPUT 
AS 
BEGIN 
    SET NOCOUNT ON 
    BEGIN TRY 

     --1 - Both Active, 2 - User InActive & Package Active, 3 - User Inactive & Package Inactive , 4 - Not authosrised 
     DECLARE @Username VARCHAR(40), @isAct Bit,@stat Bit 

     IF NOT EXISTS(SELECT 1 FROM UserSet where UserID = @LoginId) 
      BEGIN 
       RAISERROR('login does not exist',16,1) 
       RETURN; 
      END 
     SELECT @Username = ISNULL(UserID,0), @isAct = ISNULL(IsActive, 0) from UserSet where UserID = @LoginId) 
     Select @stat = ISNULL([status],0) from Subscription where UserID = @LoginId 
                and (DateOfStart <= CAST(GETDATE() as DATE) or DateOfStart is NULL) 
                and (DateOfEnd >= Cast(GETDATE() as DATE) or DateOfEnd is NULL) 

     IF (@isAct = 1 AND @stat = 1) --1 - Both Active 
      BEGIN 
      SET @ActiveStatus = 1; 
      END 
     ELSE IF (@isAct = 0 AND @stat = 1) -- 2 - User InActive & Package Active 
      BEGIN 
      SET @ActiveStatus = 2; 
      END 
     ELSE IF (@isAct = 1 AND @stat = 0) -- 3 - User Active & Package Inactive 
      BEGIN 
      SET @ActiveStatus = 3; 
      END 
     ELSE IF (@isAct = 0 AND @stat = 0) -- 4 - Not authosrised 
      BEGIN 
      SET @ActiveStatus = 4; 
      END 

    END TRY 
    BEGIN CATCH 

     IF @@TRANCOUNT > 0 
      BEGIN 
       ROLLBACK TRAN 
      END 

     EXEC uspProcErrorLog  
    END CATCH 
END 
+0

感謝M.Ali你解決了問題 –

+1

@LearningDB:如果這是解決方案,請考慮接受答案。爲此,請單擊答案左側的刻度線,以使其變爲綠色。這就是我們如何表示在Stack Overflow上已經解決了一個問題。 – halfer

0

最後if else代碼塊可以case expression被簡化:

set @status = case when @isAct = 1 and @stat = 1 then 1 
        when @isAct = 0 and @stat = 1 then 2 
        when @isAct = 1 and @stat = 0 then 3 
        when @isAct = 0 and @stat = 0 then 4 
       end 

return @status 
相關問題