2009-03-31 7 views
0

J'ai une procédure stockée qui doit obtenir un mot de passe de ma table Utilisateurs. J'utilise un nom d'utilisateur en tant que paramètre.Itérer sur un ensemble de lignes, obtenir un champ qui correspond au paramètre, puis un autre champ de cette ligne

Quel est le meilleur moyen d'obtenir la ligne où le contenu du champ Nom d'utilisateur correspond au paramètre Nom d'utilisateur, puis le mot de passe (puisqu'il s'agit de la paire Nom d'utilisateur/mot de passe pour un utilisateur). Les curseurs sont un moyen d'itérer sur un ensemble de lignes, mais ceux-ci ne sont pas souhaitables.

Je suis en train de lire quelques livres TSQL, mais je n'ai pas rencontré ce genre de problème. Des bonnes recommandations pour les livres TSQL? Je suis sur Sql Server 2005.

Répondre

1

On dirait que vous avez juste besoin d'une SELECT requête standard:

SELECT username_column, password_column 
FROM your_table 
WHERE username_column = @usernameparam 

(ou je comprends mal la question?)

+0

Cela fonctionnerait réellement. Erreur fondamentale dans ma pensée d'une solution plus complexe. Maintenant, j'ai juste besoin d'avoir une valeur de password_column :) – dotnetdev

+0

Probablement la question la plus facile à laquelle vous avez répondu toute la journée. =) – JohnFx

0

SELECT mot de passe DE Table WHERE nomutilisateur = @nomd'utilisateur

0

En supposant que votre table d'utilisateurs possède les colonnes UserName et Passw ord alors un SELECT fonctionnera très bien.

nom d'utilisateur SELECT, mot de passe des utilisateurs WHERE nom d'utilisateur = @username

Cependant, le stockage des mots de passe de cette manière pourrait ne pas être la meilleure sécurité sage idée.

1

obtenir un mot de passe de ma table Utilisateurs

Ceci est votre premier problème: JAMAIS stocker les mots de passe dans une base de données réelles. Regardez dans la fonction HashBytes() et utilisez-la pour la correspondance avec le mot de passe. Si vous pensez que vous devez garder un mot de passe réel, peut-être pour permettre aux utilisateurs de récupérer les mots de passe perdus, allez parler aux gens au reddit.

moyen d'itérer sur un ensemble de lignes

Ceci est votre deuxième problème. Vous pensez en termes d'itération sur les lignes vous-même. C'est ce qu'on appelle la programmation impérative. Bien que le code impératif fonctionne bien pour votre code client normal, il est rétroactif lorsque vous travaillez avec une base de données. Au lieu de cela, vous voulez commencer à utiliser la programmation déclarative et penser en termes d'ensembles: vous écrivez du code qui déclare à la base de données l'ensemble d'enregistrements dont vous avez besoin:

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

C'est marrant, vous devriez le mentionner parce que j'ai lu sur la distinction entre les deux. Je pense que ma nature impérative est de coder en C# et en utilisant des itérations, des boucles, etc. tous les jours. – dotnetdev

Questions connexes