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

ゴードンの答えで十分です。しかし、私は全体のprocを追加します – 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。 。 。これはストアドプロシージャの条件付きロジックになります。 –

関連する問題