繁体   English   中英

从另一个存储过程 SQL Server 调用存储过程

[英]Calling stored procedure from another stored procedure SQL Server

我有 3 个插入存储过程,每个 SP 在 2 个不同的表中插入数据

Table 1          Table 2                
idPerson         idProduct             
name             productName            
phoneNumber      productdescription     
FK-idProduct

表 1 的 SP 表 2 的 SP

create procedure test1                create procedure test2
WITH                                  WITH 
EXECUTE as caller                     EXECUTE as caller
AS                                    AS
declare                               declare

@idPerson int,                        @idProduct int,
@name varchar(20),                    @productName varchar(50),
@phone varchar(20)                    @productoDescription varchar(50)


  SET nocount on;                     SET nocount on;
    Begin                             Begin
      insert into table1(                insert into table2(
                idPerson,                          idProduct,
                name,                              productName,
                phone)                             productDescription)
          values(                            values(
                @idPerson,                         @idProduct,
                @name,                             @productName,
                @phone)                            @productDescription)
      end                               end

我需要从存储过程测试 1 中调用存储过程测试 2 并在表 1 中插入 FK-ID

只需从test1调用test2 ,如:

EXEC test2 @newId, @prod, @desc;

确保使用 SCOPE_IDENTITY() 获取@id ,它获取插入到同一范围内的标识列中的最后一个标识值:

SELECT @newId = SCOPE_IDENTITY()

您可以向 test2 添加一个 OUTPUT 参数,并在 INSERT 之后直接将其设置为新的 id 使用:

SELECT @NewIdOutputParam = SCOPE_IDENTITY()

然后在 test1 中,像这样检索它:

DECLARE @NewId INTEGER
EXECUTE test2 @NewId OUTPUT
-- Now use @NewId as needed

首先,如果table2的 idProduct 是一个身份,则在该表上设置IDENTITY_INSERT之前,您无法显式插入它

SET IDENTITY_INSERT table2 ON;

在插入之前。

因此,两者之一,您修改第二个存储并仅使用参数productNameproductDescription调用它,然后获取新 ID

EXEC test2 'productName', 'productDescription'
SET @newID = SCOPE_IDENTIY()

或者您已经拥有产品的 ID 并且您不需要调用SCOPE_IDENTITY()并且可以使用该 ID 在table1上进行插入

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM