연결된 tblUser와 tblLogin이라는 테이블이 있고 로그인시 tblUser의 login컬럼과 tblLogin의 status 컬럼을 업데이트하는 프로시저를 만들어 봤습니다.. 문제는 실행은 이상없이 되는데 업데이트를 성공해도 업데이트를 수행한 행이 없다는 returnCode -14를 출력하는데요 어디서 잘못된 걸까요 ㅠ
-------------------------------------------------------------------------------------------------------------------------------------------------
ALTER PROCEDURE [dbo].[uspUserUpatelogin]
@id VARCHAR(32)
,@passwd VARCHAR(32)
,@resultCode INT = -1 OUTPUT
AS
BEGIN
DECLARE @userPWTemp VARCHAR(32) = (SELECT passwd FROM tblUser WHERE userId=@id)
DECLARE @userIdxTmp INT = (SELECT useridx FROM tblUser WHERE userId=@id)
DECLARE @loginSTATUSTmp VARCHAR(1) = (SELECT loginstatus FROM tblLogin WHERE useridx=@userIdxTmp)
--아이디가 없을 때
SELECT userId FROM tblUser WHERE userId=@id
IF @@ROWCOUNT = 0
BEGIN
SET @resultCode = -11
RETURN
END
--패스워드가 틀릴 때
ELSE IF @passwd != @userPWTemp
BEGIN
--RAISERROR('아이디와 비밀번호가 일치하지 않습니다.', 16,1)
SET @resultCode = -12
RETURN
END
--이미 로그인 한 상태일 때
ELSE IF @loginSTATUSTmp = 'Y'
BEGIN
SET @resultcode = -13
RETURN
END
ELSE
BEGIN TRY
BEGIN TRAN
UPDATE tblUser
SET lastlogin=getdate()
WHERE userId=@id
UPDATE tblLogin
SET loginstatus = 'Y'
where useridx=@userIdxTmp
COMMIT TRAN
IF @@ROWCOUNT = 0
BEGIN
SET @resultCode = -14
RETURN
END
ELSE
BEGIN
SET @resultCode = 1
RETURN
END
END TRY
BEGIN CATCH
ROLLBACK TRAN
SELECT
ERROR_LINE() AS '오류발생 라인'
,ERROR_MESSAGE() AS '오류 메세지'
,ERROR_NUMBER() AS '오류 번호'
,ERROR_PROCEDURE() AS '오류 프로시저 이름'
,ERROR_SEVERITY() AS '오류 심각도'
,ERROR_STATE() AS '오류 상태';
SET @resultCode = -1
RETURN
END CATCH
END
Comment 1
-
항해자™
2015.12.14 15:09
if @@rowcount = 0 문장을 update 문 바로 아래로 옮겨 보세요,,,