Sql 将用户输入与已建立表的列进行比较

Sql 将用户输入与已建立表的列进行比较,sql,sql-server,stored-procedures,comparison,Sql,Sql Server,Stored Procedures,Comparison,我有一个用户输入进入数据库,与表的列进行比较。我在一个专栏上找到了大量的信息,并与另一个专栏进行了比较,这似乎并不正确 这是我的密码: CREATE Procedure Check_Previous_Passwords @ua_pk uniqueidentifier, @IncomingPassword varchar(25) AS DECLARE @TempTable TABLE (Passwords varchar(25)) INSERT INTO @Tem

我有一个用户输入进入数据库,与表的列进行比较。我在一个专栏上找到了大量的信息,并与另一个专栏进行了比较,这似乎并不正确

这是我的密码:

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
我很确定这是我完全忽略的事情。谢谢

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
这只是检查最后一个密码,以确保它不是相同的。如果要检查最后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

您不应该以明文形式传递密码

我也不明白为什么要创建临时表。您可以简单地执行以下操作:

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

您不应该以明文形式传递密码

我也不明白为什么要创建临时表。您可以简单地执行以下操作:

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


如果它们相同,或者不同,你想做什么?如果它们相同,我必须创建一个错误,说明它们需要不同的密码。如果它们不同,那么继续下一个函数,但是我在if语句中抛出了一个错误,您试图将varchar与整个varchar表进行比较。您可能需要类似于“如果存在,请从@tentable WHERE Passwords=@incomingpasswordahhh中选择密码”的内容!明白了!非常感谢。如果它们相同,或者不同,您想做什么?如果它们相同,我必须创建一个错误,说明它们需要不同的密码。如果它们不同,那么继续下一个函数,但是我在if语句中抛出了一个错误,您试图将varchar与整个varchar表进行比较。您可能需要类似于“如果存在,请从@tentable WHERE Passwords=@incomingpasswordahhh中选择密码”的内容!明白了!非常感谢。这正是我需要做的,在第条中,因为表格中的行可以不同。戈登的答案应该足够了。但是我会加上全部内容谢谢你的帮助!没问题@KevinFischerIt表示我不会退回任何东西。我需要它返回位true或false以获得更多功能这正是我需要做的,在子句中,因为表格可以在行中变化Gordon的答案应该足够了。但是我会加上全部内容谢谢你的帮助!没问题@KevinFischerIt表示我不会退回任何东西。我需要它返回位true或false以获得更多功能。我在密码部分没有太多选项。所以,我想澄清一下。我的AS之后的所有内容都应该删除并替换为此,对吗?@KevinFischer。这将是存储过程中的条件逻辑。在密码部分,我实际上没有太多选择。因此,我想澄清一下。我的AS之后的所有内容都应该删除并替换为此,对吗?@KevinFischer。这将是存储过程中的条件逻辑。