2015-02-06 5 views
0

Я хочу добавить данные в две таблицы за один раз.Вставить в две таблицы с одинаковым идентификатором пользователя одновременно

У меня есть две таблицы, UserCredentials (идентификатор пользователя, имя пользователя, пароль, UserRole) и EmployeeRecord (идентификатор пользователя, имя пользователя, Firstname, фамилия, desgination, национальности)

UserId является идентичность обеих таблиц, созданных в DB, я ищу способ, которым я могу получить userID в EmployeeRecord, в который вставлена ​​запись, чтобы я мог вставлять учетные данные для входа в ту же userId в таблице UserCredentials. Обе записи необходимо вставлять одновременно.

Это то, что мой код выглядит как прямо сейчас:

 create procedure enteremployeerecord ( 

      @firstName varchar(100), 
      @lastName varchar(100), 
      @desigNation varchar(50), 
      @natioNality varchar(50), 
      @userName varchar(50), 
      @userPassword varchar(50), 
      @userRole varchar(50)   
      ) 
    as 
    begin 

    insert into EmployeeRecord(username,firstname,lastname,designation,nationality) 
    values (@userName,@firstName,@lastName,@desigNation,@natioNality) 

    insert into UserCredentials(username,password,userrole) 
    values (@userName,@userPassword,@userRole) 

А вот LINQ код SQL в C# (Не уверен, хотя, как она будет меняться в течение двух запросов)

EmployeeRecordDBClassDataContext con = new EmployeeRecordDBClassDataContext(); 
con.enteremployeerecord(firstNameTextBox.Text, lastTextBox.Text, desginationTextBox.Text,nationalityTextBox.Text,userNameTextBox.Text, passwordEmployeeTextBox.Text, userRoleTextBox.Text) 

Я нахожусь используя VS 2012 & SQL Server 2012

+0

Почему бы вам просто не создать 'Trigger' – MethodMan

+0

Не ответ на ваш вопрос, но вы действительно не должны хранить пароли в виде простого текста. Вместо этого вам нужно использовать соленый хеш. –

+1

Ваши таблицы также страдают от денормализации. У вас есть пользователь в таблице учетных данных. Это предотвращает использование пользователем более 1 роли. Также имя пользователя должно быть не более чем в 1 таблице. –

ответ

3

UserId является удостоверением в обеих таблицах, генерируемых в БД

Плохая идея. Идентификатор должен отвечать только одной таблице. В противном случае вам придется добавить много защитных мер, чтобы гарантировать, что записи всегда добавлены в обе таблицы одновременно.

Для иллюстрации предположим, что EmployeeRecord несет ответственность за генерацию UserId. Для того, чтобы вставить в UserCredentials просто получить сгенерированный ID и вставить его:

@DECLARE @userID int 

insert into EmployeeRecord(username,firstname,lastname,designation,nationality) 
values (@userName,@firstName,@lastName,@desigNation,@natioNality) 

SELECT @userID = @@SCOPE_IDENTITY() 

insert into UserCredentials(userid, username,password,userrole) 
values (@userid, @userName,@userPassword,@userRole) 

Кроме того, с логической 1: 1 отношения между таблицами (что невозможно реализовать в SQL, так как вы не можете вставить до двух таблиц одновременно) Я бы поставил под сомнение, должны ли эти таблицы быть объединены в один. Если нет причин держать их в отдельности, то не отделяют их.

+0

Спасибо, что решил мою проблему – Basit

Смежные вопросы