Sql server SQL Server:在同一过程中也使用输出参数值

Sql server SQL Server:在同一过程中也使用输出参数值,sql-server,Sql Server,我有一个存储过程: CREATE PROCEDURE [dbo].[AddEmployee] ( @employeeId int OUTPUT, @firstName varchar(50), @lastName varchar(50), @password varchar(100) ) AS BEGIN INSERT INTO Employees(FirstName, LastName) VALUE

我有一个存储过程:

CREATE PROCEDURE [dbo].[AddEmployee]
    (
        @employeeId int OUTPUT,
        @firstName varchar(50),
        @lastName varchar(50),
        @password varchar(100)
    )
AS
BEGIN
    INSERT INTO Employees(FirstName, LastName)
    VALUES(@firstName, @lastName)

    INSERT INTO Logins(Password, EmployeeId)
    VALUES(@password, @employeeId)

    SELECT @@Identity
END
GO
让,

在插入员工时生成

在那之后,我试图将
@employeeId
插入
Logins

另外,
@employeeId
用作
输出
参数

我该怎么做


也许我们可以使用INSERTED.EmployeeId,但我不知道如何使用它

假设EmployeeId列是一个标识列,则应使用OUTPUT子句获取值(将其输出到表变量中):

然后,要将表变量中的值转换为标量变量,请执行以下操作:

SET @employeeId = (SELECT TOP 1 empId FROM @empId)

假设EmployeeId列是标识列,则应使用OUTPUT子句获取值(将其输出到表变量中):

然后,要将表变量中的值转换为标量变量,请执行以下操作:

SET @employeeId = (SELECT TOP 1 empId FROM @empId)

@@Identity
值是在当前会话中插入的最后一个标识,与范围无关。因此,它可以是触发器插入的行的标识。最好使用
scope\u identity()
。有关更多详细信息

可以指定如下输出参数:

set @employeeId = scope_identity()

@@Identity
值是在当前会话中插入的最后一个标识,与范围无关。因此,它可以是触发器插入的行的标识。最好使用
scope\u identity()
。有关更多详细信息

可以指定如下输出参数:

set @employeeId = scope_identity()

为什么您的存储过程以
select@@identity
结尾?@Andomar-oh从OP中复制粘贴,并将其删除,因为它实际上改变了行为。谢谢你的提示;)现在你的答案看起来不错,+1+1这个答案肯定比公认的答案好。唯一的改进应该是在最后更新示例
EXEC
,以显示
DECLARE@EmpID INT
然后proc调用的最后一行应该是:
,@employeeId=@EmpID OUTPUT。为什么您的存储过程以
select@@identity
结尾?@Andomar-oh从OP中复制粘贴,并将其删除,因为它实际上改变了行为。谢谢你的提示;)现在你的答案看起来不错,+1+1这个答案肯定比公认的答案好。唯一的改进应该是在最后更新示例
EXEC
,以显示
DECLARE@EmpID INT
然后proc调用的最后一行应该是:
,@employeeId=@EmpID OUTPUT+1这应该可以正常工作。您的第二个查询可以缩写为
select@employeeId=empId from@empId
+1这应该可以正常工作。您的第二个查询可以缩写为
select@employeeId=empId from@empId
set @employeeId = scope_identity()