Stored procedures 存储程序,不';t记录第二次插入的数据

Stored procedures 存储程序,不';t记录第二次插入的数据,stored-procedures,sql-server-2012,Stored Procedures,Sql Server 2012,我打算在多个表中插入数据,对于每个条目,我需要为每个插入捕获SCOPE_IDENTITY()。在我的存储过程中,它存储第一次插入的记录并返回SCOPE_IDENTITY(),但除非我删除SCOPE_IDENTITY(),否则后面的插入不会记录值。。。我做错了什么 我正在使用SQL Server 2012 USE [MySolution01_DB] GO SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO ALTER PROCEDURE [dbo]

我打算在多个表中插入数据,对于每个条目,我需要为每个插入捕获SCOPE_IDENTITY()。在我的存储过程中,它存储第一次插入的记录并返回SCOPE_IDENTITY(),但除非我删除SCOPE_IDENTITY(),否则后面的插入不会记录值。。。我做错了什么

我正在使用SQL Server 2012

USE [MySolution01_DB]
GO

SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO

ALTER PROCEDURE [dbo].[CreateNewFunctionsNavigation]
  @FunctionName nvarchar(250),
  @Hierarchy_Level INT,
  @Function_identity INT OUTPUT, 
  @ControllerName nvarchar(250), 
  @Controller_identity INT OUTPUT
AS
BEGIN
SET NOCOUNT ON;

INSERT INTO [dbo].[Navigation_Functions] ([FunctionName],[Hierarchy_Level] ) 
VALUES(@FunctionName, @Hierarchy_Level)

   SET @Function_identity=SCOPE_IDENTITY()
   RETURN @Function_identity


INSERT INTO [dbo].[Navigation_FunctionController] ([ControllerName])
VALUES(@ControllerName)

   SET @Controller_identity = SCOPE_IDENTITY()
   RETURN @Controller_identity

   RETURN
END

删除两个return语句。您将变量定义为输出。然后为这些变量设置值,就是这样。当存储过程遇到return语句时,它的行为与任何其他语言类似,它从当前代码块的正确位置返回。这意味着在您的代码中,它将在您设置函数_identity的值后立即退出过程。非常感谢Sean正确地指导我,它可以工作。。。