【问题标题】:Comparing a User Input to an already established table's column将用户输入与已建立的表的列进行比较
【发布时间】:2016-12-08 21:43:17
【问题描述】:

我有一个用户输入进入数据库以与表的列进行比较。我在比较另一列的列上发现了大量信息,但似乎无法正常工作。

这是我的代码:

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

我很确定这是我完全忽略的事情。谢谢!

【问题讨论】:

  • 如果它们相同或不同,你想做什么?
  • 如果它们相同,我必须创建一个错误,说明它们需要不同的密码。如果不同,则继续下一个函数
  • 但我在使用 TempTable 的 IF 语句中抛出错误
  • 您正在尝试将 varchar 与整个 varchar 表进行比较。您可能想要类似 IF EXISTS (SELECT Passwords FROM @TempTable WHERE Passwords = @IncomingPassword)
  • 啊啊啊!明白了!非常感谢

标签: sql sql-server stored-procedures comparison


【解决方案1】:

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

我也不明白您为什么要创建临时表。你可以这样做:

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

【讨论】:

  • 我在密码部分没有太多选择。
  • 所以,我想弄清楚这一点。我的 AS 之后的所有内容都应该被删除并替换为这个,对吗?
  • @KevinFischer 。 . .这将是存储过程中的条件逻辑。
【解决方案2】:
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

【讨论】:

  • 这正是我需要做的,IN 子句,因为该表可以在行中变化
  • 那么戈登的回答就足够了。但我会添加整个过程
  • 感谢您的帮助!
  • 没问题@KevinFischer
  • 它说明我没有返回任何东西。我需要它返回 true 或 false 以获得更多功能
猜你喜欢
  • 2016-03-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-11-01
  • 1970-01-01
  • 2017-12-11
  • 2019-10-19
  • 1970-01-01
相关资源
最近更新 更多