2012-01-13 242 views
26

我有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

回答

21

只需要致電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

6

你可以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

0
所有的

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

SET IDENTITY_INSERT table2 ON; 

設置IDENTITY_INSERT插入它明確。

所以兩個一,修改你的第二個存儲,並只與參數productNameproductDescription調用它,然後獲得新的ID

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

,或者你已經擁有的產品的ID和你不」噸需要調用SCOPE_IDENTITY(),可以使上的插件table1與ID

相關問題