Sql server 如何使用以下用例在SQL中获取记录
我有一个用例,在这个用例中,我必须从passwordhistory表中获取最后五个密码,其中有两列,第一列是md5加密的,第二列是散列,在检索五条记录之后,我必须将这些列与新密码进行比较,在将它们从md5和散列函数中移动之后,如果找到任何记录,则返回true,否则返回falseSql server 如何使用以下用例在SQL中获取记录,sql-server,Sql Server,我有一个用例,在这个用例中,我必须从passwordhistory表中获取最后五个密码,其中有两列,第一列是md5加密的,第二列是散列,在检索五条记录之后,我必须将这些列与新密码进行比较,在将它们从md5和散列函数中移动之后,如果找到任何记录,则返回true,否则返回false DECLARE @UserID INT = 6 DECLARE @Password NVARCHAR(200)='admin1952' SELECT * FROM ( SELECT TOP 5
DECLARE @UserID INT = 6
DECLARE @Password NVARCHAR(200)='admin1952'
SELECT *
FROM ( SELECT TOP 5
ChangedPassword AS ChangedPassword ,
PasswordChangeHistory.Password_Hash AS Password_Hash
FROM PasswordChangeHistory WITH ( NOLOCK )
INNER JOIN [User] U WITH ( NOLOCK ) ON PasswordChangeHistory.UserID = U.Id
WHERE PasswordChangeHistory.UserID = @UserID
) AS result
WHERE PasswordChangeHistory.ChangedPassword = dbo.Encrypt_MD5(@Password)
要回答主题行中的问题,这里有一种方法(在psuedocode中):
当然,如果您确实在寻找“True”和“False”,也可以将1和0替换为“True”和“False”。您也可以在查询后尝试:
if @@rowcount >0
select 'user found'
else
select 'user not found'
这是问题的解决办法。正如我前面所解释的,我需要表中的五条记录,然后用现有的五条记录检查新密码,如果这个新密码与以前的密码匹配,那么返回false,否则返回true
DECLARE @UserID INT = 6
DECLARE @Password NVARCHAR(200)= 'admin1958'
SELECT * FROM
( SELECT TOP(5) ChangedPassword AS Changed ,PasswordChangeHistory.Password_Hash AS Password_Hash
FROM PasswordChangeHistory WITH ( NOLOCK )
INNER JOIN [User] U WITH ( NOLOCK ) ON PasswordChangeHistory.UserID = U.Id
WHERE PasswordChangeHistory.UserID = @UserID
ORDER BY PasswordChangeHistory.ID DESC
) AS result
WHERE result.Changed= dbo.Encrypt_MD5(@Password) or result.Password_Hash = dbo.Encrypt_SHA2(@Password)
选择顶部(5)是什么?您知道,如果返回任何行,则返回的最后一行将被分配给changedpassword@密码从未分配值,而是传递给加密_md5?我们是否缺少一些代码?您当前的尝试有什么问题?它不会返回true/false。我个人认为它只需要在外部选择中进行计数,如果计数>=1,则为1,否则为0<代码>当count(*)>=1时选择case,然后1 else 0结束为以前使用的值并删除其他选择值。问题是当我运行此查询时,在where out selects上给出错误,但我的查询尚未返回任何内容,我需要满足我需要的查询如果这是答案,请将其标记为结束问题。我今天不允许。我将在明天这样做。
DECLARE @UserID INT = 6
DECLARE @Password NVARCHAR(200)= 'admin1958'
SELECT * FROM
( SELECT TOP(5) ChangedPassword AS Changed ,PasswordChangeHistory.Password_Hash AS Password_Hash
FROM PasswordChangeHistory WITH ( NOLOCK )
INNER JOIN [User] U WITH ( NOLOCK ) ON PasswordChangeHistory.UserID = U.Id
WHERE PasswordChangeHistory.UserID = @UserID
ORDER BY PasswordChangeHistory.ID DESC
) AS result
WHERE result.Changed= dbo.Encrypt_MD5(@Password) or result.Password_Hash = dbo.Encrypt_SHA2(@Password)