2012-01-13 20 views
26

मैं 2 अलग टेबलएक और संग्रहीत प्रक्रिया SQL सर्वर से संग्रहीत प्रक्रिया कॉलिंग

में 3 डालने संग्रहित प्रक्रियाओं प्रत्येक सपा आवेषण डेटा है
Table 1   Table 2     
idPerson   idProduct    
name    productName    
phoneNumber  productdescription  
FK-idProduct 

के लिए तालिका 1 तालिका के लिए सपा सपा 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 

मैं की जरूरत है संग्रहीत प्रक्रिया परीक्षण 2 से संग्रहीत प्रक्रिया परीक्षण 2 को कॉल करने के लिए और तालिका में एफके-आईडी डालें 1

उत्तर

21

test1 से test2 पर कॉल करें जैसे:

EXEC test2 @newId, @prod, @desc; 

का उपयोग कर @id पाने के लिए सुनिश्चित करें:

SELECT @newId = @@SCOPE_IDENTITY 
+0

पर डालने से यह तालिका 1 में idPerson, name, phone और idProduct को डालने और तालिका 2 में idProduct, productName और productDescription में डालने की आवश्यकता होगी? –

+0

@@ SCOPE_IDENTITY एक चीज़ नहीं है। SCOPE_IDENTITY() – MPaul

6

आप test2 के लिए एक आउटपुट पैरामीटर जोड़ सकते हैं, और का उपयोग कर नए आईडी से यह सेट सीधे सम्मिलित बाद:

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/ विवरण/328,811 /) –

0
सब से

पहला, अगर table2 के idProduct एक पहचान है, तो आप यह स्पष्ट रूप से सम्मिलित नहीं कर सकते जब तक आप उस तालिका

SET IDENTITY_INSERT table2 ON; 

पर IDENTITY_INSERT सेट डालने से पहले।

तो दो में से एक, आप अपने दूसरे संग्रहीत को संशोधित करने और केवल मापदंडों productName और productDescription से कॉल करने और फिर नए आईडी प्राप्त

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

या आप पहले से ही उत्पाद की आईडी है और आप डॉन ' टी SCOPE_IDENTITY() पर कॉल करने की आवश्यकता है और उस आईडी पर उस आईडी

संबंधित मुद्दे