Sql server 迭代一个行集,获取一个与参数匹配的字段,然后从该行获取另一个字段

Sql server 迭代一个行集,获取一个与参数匹配的字段,然后从该行获取另一个字段,sql-server,sql-server-2005,tsql,Sql Server,Sql Server 2005,Tsql,我有一个存储过程,必须从Users表中获取密码 我使用用户名作为参数。获取Username字段内容与Username参数匹配的行以及密码(因为这是一个用户的用户名/密码对)的最佳方式是什么 游标是在行集上迭代的一种方法,但它们并不可取 我目前正在阅读一些TSQL书籍,但没有遇到这种问题。对TSQL书籍有什么好的建议吗?我使用的是Sql Server 2005。听起来您只需要一个标准的选择查询: SELECT username_column, password_column FROM your_t

我有一个存储过程,必须从Users表中获取密码

我使用用户名作为参数。获取Username字段内容与Username参数匹配的行以及密码(因为这是一个用户的用户名/密码对)的最佳方式是什么

游标是在行集上迭代的一种方法,但它们并不可取


我目前正在阅读一些TSQL书籍,但没有遇到这种问题。对TSQL书籍有什么好的建议吗?我使用的是Sql Server 2005。

听起来您只需要一个标准的
选择
查询:

SELECT username_column, password_column
FROM your_table
WHERE username_column = @usernameparam
(还是我误解了这个问题?

选择 密码 从…起 桌子 哪里
username=@username

假设您的users表中有username和Password列,那么选择就可以了

选择username,password FROM username=@username的用户

但是,以这种方式存储密码可能不是最好的安全方法

从“我的用户”表中获取密码

这是您的第一个问题:从不在数据库中存储真实密码。查看HashBytes()函数并将其用于密码匹配。如果你认为你需要保留一个真实的密码,也许是为了让用户能够恢复丢失的密码,那就去和那边的人谈谈

迭代行集的方法

这是你的第二个问题。您正在考虑自己迭代行。这称为命令式编程。虽然命令式代码对于您的普通客户机代码非常有效,但当您使用数据库时,它是反向的。相反,您希望开始使用声明性编程,并用集合的术语来思考:编写一些代码,向数据库声明需要返回的记录集合:

SELECT [password] /*shudder*/ FROM [table] WHERE [username] = @username

这实际上是可行的。我在思考更复杂的解决方案时犯了根本性错误。现在我只需要在password_列中输入一个out值:)这可能是您一整天以来回答的最简单的问题。=)有趣的是,你应该提到这一点,因为我已经读到了这两者之间的区别。我认为我的命令式本质来自于C#编码和每天使用迭代、循环等。