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:谢谢,非常好的一点-对于生产级代码,这是必须的-不过,这只是一个简单的示例来说明基本机制。