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()