我想一次性在两个表中添加数据。
我有两个表, UserCredentials (用户ID,用户名,密码,用户名称)和 EmployeeRecord (用户ID,用户名,名字,姓氏,设防,国籍)
UserId是在DB中生成的两个表中的标识,我正在寻找一种方法,我可以在EmployeeRecord中获取插入记录的userID,以便我可以在UserCredentials表中的同一userId中插入登录凭据。两个记录都需要同时插入。
这就是我现在的代码:
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)
这里是C#中的LINQ SQL代码(不确定它将如何改变两个查询)
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 :(得分:3)
UserId是在DB
中生成的两个表中的标识
糟糕的主意。只需要一个表负责标识符。否则,您必须添加许多保护措施,以确保记录始终同时添加到两个表中。
为了说明,我们假设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中实现),我将质疑表是否应合并为一个表。如果没有理由将它们分开,那么不要将它们分开。