2016-12-08 2 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

, но я бросаю ошибку в инструкции IF с помощью TempTable –

ответ

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 число паролей, мы можем использовать предложение IN или EXISTS

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

Вы не должны передать пароли в виде текста.

Я также не понимаю, почему вы создаете временную таблицу. Вы можете просто:

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. , , Это будет условная логика в хранимой процедуре. –