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

问题描述:

我有3个插入件的存储过程在2页不同的表从另一个存储过程的SQL Server调用存储过程

每个SP数据插入
Table 1   Table 2     
idPerson   idProduct    
name    productName    
phoneNumber  productdescription  
FK-idProduct 

SP为表1 SP为表2

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并在表格中插入FK-ID 1

只需要致电test2test1如:

EXEC test2 @newId, @prod, @desc; 

确保使用获得@id

SELECT @newId = @@SCOPE_IDENTITY 
+0

将它做的idPerson,姓名,电话和idProduct插入table1中和idProduct,产品名称和产品描述表2中? – 2012-01-13 23:41:20

+0

@@ SCOPE_IDENTITY不是问题。使用SCOPE_IDENTITY() – MPaul 2014-07-21 14:38:59

你可以OUTPUT参数添加到Test2和使用INSERT后直接将其设置为新的ID:

SELECT @NewIdOutputParam = SCOPE_IDENTITY() 

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

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

请注意,除非您在2012版之前的SQL版本上使用MAX_DOP = 1,否则不能依赖SCOPE_IDENTITY()来返回准确的结果。(请参见:http://connect.microsoft.com/SQLServer/feedback/细节/ 328811 /) – 2013-05-02 15:57:46

所有的

首先,如果table2的idProduct是一个身份,你不能,直到你在插入之前该表

SET IDENTITY_INSERT table2 ON; 

设置IDENTITY_INSERT插入它明确。

所以两个一,修改你的第二个存储,并只与参数productNameproductDescription调用它,然后获得新的ID

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

,或者你已经拥有的产品的ID和你不”吨需要调用SCOPE_IDENTITY(),可以使上的插件table1与ID