2012-01-06 3 views
1

У меня есть основная хранимая процедура, которая вставляет 3 поля varchar, имя, адрес и номер телефона и другие 3 поля, которые вставляют идентификатор из внешних ключей в таблицу, эти 2 поля внешнего ключа также используют хранимую процедуру вставки, чтобы вставить свои собственные данные. Как я могу вызвать эти хранимые процедуры из основного SP, чтобы вставить поля varchar и поля внешнего ключа, сгенерированные при их выполнении?Как вызвать хранимую процедуру из другой хранимой процедуры в SQL Server?

Table 1   Table 2   Table 3 
id,    id2,   id3, 
name1,   name2,   name3, 
address1,  address2,  address3, 
phoneNumber1, phoneNumber2, phoneNumber3 
id2, 
id3, 

create procedure table1  
@id int, 
@name1 varchar(30), 
@address1 varchar(100), 
@phoneNumber1 varchar(30) 
as 
    BEGIN 
set nocount on; 

Insert into table1 
      (id, 
      name, 
      address, 
      phoneNumber) 
    values(
      @id, 
      @name, 
      @address, 
      @phoneNumber) 
    END 

------After inserting the data into table 1, I want to call the SP of table 2 and 3--- 

EXEC SPTable2 

ответ

2

От главной процедуры:

Insert into table1 (...) 
exec yourProcName @param='foo' 

Вы должны каждый Proc возвращать набор данных, вам нужно, и главный прок вызов каждого из них и сделать INSERT INTO, как я показал выше.

Определение таблицы table1 должно соответствовать точно количеству столбцов и типам данных наборов результатов, возвращаемых другими процессами.

Если вы не можете гарантировать это условие, вы, вероятно, лучше писать функцию, которая возвращает таблицу, так что вы можете сделать insert into table1 (....) select col1, col2, etc from fnFoo(@param)

+0

Другие процедуры также вставлять данные в своих таблицах в основном я просто хочу выполнить их из основного SP, чтобы выполнить вставку трех полей varchar и идентификаторов таблицы 2 и 3 –

+0

@arturor, когда вы говорите «данные в своих собственных таблицах», вы имеете в виду временные таблицы? Но опять же, если все дело в том, чтобы вызвать procs, чтобы заставить их делать свое дело самостоятельно, просто выполните 'exec yourprocname'. Надеюсь, вы не имеете в виду «глобальные временные таблицы», потому что это редко бывает хорошей идеей. Представьте, что ваш proc работает одновременно ... – Icarus

+0

Нет, они не являются временными таблицами, и у них есть свой собственный SP для вставки данных. –

Смежные вопросы