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

art*_*o r 36 sql sql-server stored-procedures sql-server-2005

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

Table 1          Table 2                
idPerson         idProduct             
name             productName            
phoneNumber      productdescription     
FK-idProduct
Run Code Online (Sandbox Code Playgroud)

对于表2,表1 SP的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
Run Code Online (Sandbox Code Playgroud)

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

Mar*_*lec 31

简单地调用test2test1这样的:

EXEC test2 @newId, @prod, @desc;
Run Code Online (Sandbox Code Playgroud)

一定要@id使用:

SELECT @newId = @@SCOPE_IDENTITY
Run Code Online (Sandbox Code Playgroud)


Ada*_*Dev 6

您可以向test2添加OUTPUT参数,并在INSERT之后使用以下命令将其设置为新的id:

SELECT @NewIdOutputParam = SCOPE_IDENTITY()
Run Code Online (Sandbox Code Playgroud)

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

DECLARE @NewId INTEGER
EXECUTE test2 @NewId OUTPUT
-- Now use @NewId as needed
Run Code Online (Sandbox Code Playgroud)

  • 请注意,除非在2012年之前的SQL版本上使用MAX_DOP = 1,否则不能依赖SCOPE_IDENTITY()来返回准确的结果.(请参阅:http://connect.microsoft.com/SQLServer/feedback/details/328811/) (2认同)