2016-12-08 5 views
1

데이터베이스의 사용자 입력이 테이블의 열과 비교됩니다. 다른 열을 비교하는 열에 대한 정보를 많이 찾았습니다. 올바르게 작동하지 않는 것 같습니다. 나는 그것이 내가 완전히 간과하고 뭔가 확신사용자 입력을 이미 설정된 테이블의 열과 비교하기

CREATE Procedure Check_Previous_Passwords 
    @ua_pk uniqueidentifier, 
    @IncomingPassword varchar(25) 
AS 
    DECLARE @TempTable TABLE (Passwords varchar(25)) 

    INSERT INTO @TempTable 
    SELECT * 
    FROM User_Passwords 
    WHERE ua_fk = @ua_pk 

    IF @IncomingPassword = @TempTable.Passwords 
     --Then do stuff 

GO 

:

여기 내 코드입니다. 감사!

+0

그들이 동일하거나 서로 다른 경우 무엇을하고 싶습니까? – scsimon

+0

동일하면 다른 비밀번호가 필요하다는 오류 메시지를 작성해야합니다. 그들은 다른 경우 다음 함수를 계속 –

+0

하지만 TempTable 함께 IF 문을 오류 던지고 있어요 –

답변

1
CREATE Procedure Check_Previous_Passwords 
    @ua_pk uniqueidentifier, 
    @IncomingPassword varchar(25) 
AS 
    DECLARE @Temp VARCHAR(25) 

    SET @Temp = (SELECT TOP 1 Password 
       FROM User_Passwords 
       WHERE ua_fk = @ua_pk 
       ORDER BY someDate DESC) 


    IF @IncomingPassword = @Temp 
     BEGIN 
       SELECT 'You can't reuse the same PW' 
     END 
    ELSE 
     BEGIN 
       --do work 
     END 

GO 

이것은 마지막 암호를 확인하여 동일하지 않은지 확인합니다. 당신이 암호의 마지막 N 번호를 확인하려는 경우 일반 텍스트로 암호를 전달해서는 안

CREATE Procedure Check_Previous_Passwords 
    @ua_pk uniqueidentifier, 
    @IncomingPassword varchar(25) 
AS 
    DECLARE @Temp VARCHAR(25) 

    SET @Temp = (SELECT TOP 1 Password 
       FROM User_Passwords 
       WHERE ua_fk = @ua_pk 
       ORDER BY someDate DESC) 


    IF (EXISTS (SELECT 1 FROM User_Passwords up where up.ua_fk = @ua_pk and @IncomingPassword = up.Password)) 
     BEGIN 
       SELECT 'You can't reuse the same PW' 
     END 
    ELSE 
     BEGIN 
       --do work... like an insert 
     END 

GO 
+0

입니다. IN 절은 행이 다를 수 있으므로 –

+0

고든의 답변으로 충분합니다. 하지만 전체 프로 시저를 추가하겠습니다 – scsimon

+0

도와 주셔서 감사합니다! –

3

우리는 IN 절을 사용하거나 EXISTS 수 있습니다.

임시 테이블을 만드는 이유도 알 수 없습니다. 당신은 간단하게 할 수 있습니다 :

if (exists (select 1 from User_Passwords up where up.ua_fk = @ua_pk and @IncomingPassword = up.Password)) 
begin 
. . . 
end; 
else 
begin 
. . . 
end; 
+0

암호 부분에 많은 옵션이 없습니다. –

+0

그래서, 나는 이것을 똑바로하고 싶다.내 AS 이후의 모든 것을 제거하고 이것을 바꿔야합니까? –

+0

@KevinFischer. . . 이것은 저장 프로 시저의 조건부 논리입니다. –