Stored procedures 插入一行并获取其id并将该id插入另一个表的存储过程
我有一个带有列的表Stored procedures 插入一行并获取其id并将该id插入另一个表的存储过程,stored-procedures,Stored Procedures,我有一个带有列的表user Id | Name | Email Id | UserId | Designation 我有另一个带有列的表employee Id | Name | Email Id | UserId | Designation 有没有一种方法可以编写一个存储过程,在该过程中,我将一行插入User并获取Id,然后使用该Id(作为UserId)将一行插入Employee表中?当然-没问题-尝试这样的代码: CREATE PROCEDURE dbo.InsertUserAndEm
user
Id | Name | Email
Id | UserId | Designation
我有另一个带有列的表employee
Id | Name | Email
Id | UserId | Designation
有没有一种方法可以编写一个存储过程,在该过程中,我将一行插入
User
并获取Id
,然后使用该Id
(作为UserId
)将一行插入Employee
表中?当然-没问题-尝试这样的代码:
CREATE PROCEDURE dbo.InsertUserAndEmployee
(@Name VARCHAR(100),
@Email VARCHAR(255),
@Designation VARCHAR(100)
)
AS
BEGIN
-- Insert into "User"
INSERT INTO dbo.User (Name, Email)
VALUES (@Name, @Email);
-- get the newly inserted ID
DECLARE @UserId INT;
SELECT @UserId = SCOPE_IDENTITY();
-- Insert into "Employee"
INSERT INTO dbo.Employee (UserId, Designation)
VALUES (@UserId, @Designation);
END
MySQL还是SQL Server?它们不是同一件事。正确标记!!!MySQL SQL Server!!!所以您不知道使用的是哪种DBMS?一种选择是使用输出。如果表上有触发器,我会使用SCOPE_IDENTITY而不是@IDENTITY。您可以在表1上的插入触发器中进行插入,并直接从插入的虚拟表中获取Id。非常感谢。如果说我有表3,并且想在表3中插入员工id,那么我可以用'DECLARE@@EmployeeId INT;选择@EmployeeId=SCOPE\u IDENTITY'@adithyasai:是的,绝对-但只使用一个
@
来表示变量-声明@EmployeeId INT
…我建议将两个插入都包装在一个事务中,并在catch
上为每个插入使用try..catch
和rollback
。@ZoharPeled:谢谢,非常好的一点-对于生产级代码,这是必须的-不过,这只是一个简单的示例来说明基本机制。