Member 8583441 Ответов: 1

Мне нужны два оператора select в SQL server в одном столбце с использованием or


у меня есть две таблицы, а именно студент и пользователи. В таблице student у меня есть поля Id, Name, Password. В таблице пользователей у меня есть идентификатор, имя, пароль и т. д.

Теперь мой вопрос заключается в том, чтобы выбрать две таблицы со столбцом пароля только в хранимой процедуре. В этой строке я хочу использовать или для выбора двух таблиц. Почему я требую, чтобы если пользователь меняет пароль, то он должен проверить, находится ли пользователь в таблице student или в таблице user. Для этого я устанавливаю значение локальной переменной с помощью этой переменной, обращающейся к таблицам и обновляющей пароль.

Этот пароль заполняет тип данных varchar(max)

Что я уже пробовал:

SET @@CurrentPassword4db = ((SELECT [Password] FROM Users WHERE UserId = @guidUserId) OR (SELECT [Password] FROM Student WHERE StudentId = @guidStudentId))


Может ли кто-нибудь подсказать мне правильный способ достижения этой цели? Заранее спасибо
Здесь
@@CurrentPassword4db is varchar(max)
тип данных

1 Ответов

Рейтинг:
2

OriginalGriff

Несколько вещей здесь не так:
1) Никогда не храните пароли в открытом тексте - это огромная проблема безопасности. Пароли должны быть хэшированы, а хэш-значение сохранено в БД. Это требует внесения изменений в программное обеспечение для презентаций, и здесь есть пример для C#: Хранение паролей: как это сделать.[^]

2) почему две таблицы хранят одно и то же? Это просто рискует потенциальным дублированием и проблемами. Вместо этого создайте одну таблицу со столбцом, в котором будет указано, предназначена ли строка для пользователя или студента. Таким образом, весь Ваш логин, регистрация, смена пароля и т.д. код становится целой загрузкой чище, так как все это хранится в одном и том же месте. С вашей схемой вполне возможно получить один и тот же идентификатор пользователя в двух разных таблицах, и тогда вы никогда не узнаете, что происходит!