2013-04-04 3 views
28

Как я могу выполнить хранимую процедуру в другой хранимой процедуре на SQL-сервере? Как передать параметры второй процедуры?Выполнение хранимой процедуры в другой хранимой процедуре на сервере SQL

+0

Планируете ли вы сделать это на C# или как StoredProc на самом Сервере? – MethodMan

+0

используйте ключевое слово 'exec'. – Matthew

+0

Мне нужно выполнить в самом Сервере – Roys

ответ

0

Вы можете вызвать определенные пользователем функции в хранимой процедуре поочередно

это может решить вашу проблему вызвать хранимую процедуру,

2

Да, вы можете сделать это так:

BEGIN 
    DECLARE @Results TABLE (Tid INT PRIMARY KEY); 

    INSERT @Results 

    EXEC Procedure2 [parameters]; 
    SET @total 1; 

END 
SELECT @total 
36

If вы только хотите выполнить некоторые конкретные операции по вашему второму SP и не требовать значений обратно от SP, а просто выполните:

Exec secondSPName @anyparams 

Иначе, если вам нужны значения, возвращаемые вашим вторым SP внутри вашего первого, затем создайте временную переменную таблицы с равным количеством столбцов и с тем же определением возврата столбца вторым SP. Тогда вы можете получить эти значения в первом SP как:

Insert into @tep_table 
Exec secondSPName @anyparams 

Update:

Чтобы передать параметр ко второму зр, сделайте следующее:

Declare @id ID_Column_datatype 
Set @id=(Select id from table_1 Where yourconditions) 

Exec secondSPName @id 

Update 2:

Предположим, что ваш второй sp возвращает Id и Name где тип id - int и name - varchar(64) тип.

теперь, если вы хотите, чтобы выбрать эти значения в первом зре затем создать временные table переменного и вставки значения в нем:

Declare @tep_table table 
(
    Id int, 
    Name varchar(64) 
) 
Insert into @tep_table 
Exec secondSP 

Select * From @tep_table 

Это вернет вас значение, возвращаемое второе SP.

Надеюсь, это ясно, все ваши сомнения.

+0

tanx .. ya i нужны значения, возвращаемые вторым sp внутри первого. bt параметр, который мне нужно передать, является выходом первой процедуры. Является ли это возможным.? См. Этот пример. SP1 Выберите идентификатор из таблицы_1. возможно ли передать этот идентификатор в качестве параметра второй процедуры.? – Roys

+0

Да, это возможно, но сначала вам нужно сохранить этот идентификатор в переменной, а затем передать его второму sp. См. Обновленный ответ. –

+0

Вышеуказанные шаги сработали.tanx. Как я могу получить выходное значение второго Sp из первого? – Roys

4

Предположим, у вас есть одна хранимая процедура, как эта Первая хранимая процедура

:

Create PROCEDURE LoginId 
    @UserName nvarchar(200), 
    @Password nvarchar(200) 
AS 
BEGIN 
    DECLARE @loginID int 

    SELECT @loginID = LoginId 
    FROM UserLogin 
    WHERE UserName = @UserName AND Password = @Password 

    return @loginID 
END 

Теперь вы хотите, чтобы вызвать эту процедуру из другой хранимой процедуры вроде как ниже

Вторая хранимая процедура

Create PROCEDURE Emprecord 
     @UserName nvarchar(200), 
     @Password nvarchar(200), 
     @Email nvarchar(200), 
     @IsAdmin bit, 
     @EmpName nvarchar(200), 
     @EmpLastName nvarchar(200), 
     @EmpAddress nvarchar(200), 
     @EmpContactNo nvarchar(150), 
     @EmpCompanyName nvarchar(200) 

    AS 
    BEGIN 
     INSERT INTO UserLogin VALUES(@UserName,@Password,@Email,@IsAdmin) 

     DECLARE @EmpLoginid int 

     **exec @EmpLoginid= LoginId @UserName,@Password** 

     INSERT INTO tblEmployee VALUES(@EmpName,@EmpLastName,@EmpAddress,@EmpContactNo,@EmpCompanyName,@EmpLoginid) 
    END 

Как вы видели выше, мы можем л одна хранимая процедура с другого

0

Ваш sp_test: Возвращение FULLNAME

USE [MY_DB] 
GO 

IF (OBJECT_ID('[dbo].[sp_test]', 'P') IS NOT NULL) 
DROP PROCEDURE [dbo].sp_test; 
GO 

CREATE PROCEDURE [dbo].sp_test 
@name VARCHAR(20), 
@last_name VARCHAR(30), 
@full_name VARCHAR(50) OUTPUT 
AS 

SET @full_name = @name + @last_name; 

GO 

В вашем sp_main

... 
DECLARE @my_name VARCHAR(20); 
DECLARE @my_last_name VARCHAR(30); 
DECLARE @my_full_name VARCHAR(50); 
... 

EXEC sp_test @my_name, @my_last_name, @my_full_name OUTPUT; 
... 
0

Да, Его легко, как мы называем функцию внутри магазина процедура.

, например. создайте пользователя, определите функцию Возраста и используйте в выбранном запросе.

select dbo.GetRegAge(R.DateOfBirth, r.RegistrationDate) as Age,R.DateOfBirth,r.RegistrationDate from T_Registration R 
Смежные вопросы