2015-10-07 2 views
0

Я новичок в SQL-Server. У меня несколько процедур. Процедура1 фильтрует данные на основе значения int, как показано ниже.Как передать переменную таблицы хранимой процедуре в SQL-Server 2014

Procedure1 '70' 

Another1 procedure2, анализировать выходные процедуры1 и фильтры его снова на основе двух значений

Procedure2 '10', '20' 

Теперь я хочу написать Главная процедуру, которая принимает 3 аргумента и первый пройти первый аргумент Процедура1, а затем процедура2 получает результат процедуры 1 и второй и третий аргументы для проведения анализа.

Код для главной процедуры

CREATE PROCEDURE spA_Main 
(
@Argument1 int, 
@Argument2 int, 
@Argument3 int 
) 
AS 
Begin 

DECLARE @Task1Table TABLE 
(
Userid  varchar(20), 
Dtime  float, 
Utime  float, 
Days  int 

) 

--Task1 
INSERT @Task1Table Execute Procedure1 @Argument1 


--Task2 

--SELECT * FROM @Task1Table 
END 
+1

Читайте о таблицах значных параметров: https: // msdn.microsoft.com/en-us/library/bb510489.aspx –

ответ

2

Создать функцию вместо процедуры, синтаксис будет выглядеть следующим образом:

CREATE FUNCTION [ schema_name. ] function_name ([ { @parameter_name [ AS ] [ type_schema_name. ] parameter_data_type 
    [ = default ] [READONLY] } 
    [ ,...n ] 
    ] 
) 
RETURNS @return_variable TABLE <table_type_definition> 
    [ WITH <function_option> [ ,...n ] ] 
    [ AS ] 
    BEGIN 
     function_body 
     RETURN 
    END 
[ ; ] 

Имейте это вернуть данные, которые будут возвращать первый порядок, и храните его во временной таблице. Затем передайте это как аргумент второй процедуры.

Также я думаю, что было бы разумнее объединить все эти процедуры в 1, поскольку SQL - это не столько язык программирования, сколько язык запросов.

+0

Мне понравился ваш комментарий, чтобы сохранить его в одной процедуре, потому что я могу легко объявить несколько переменных таблицы для хранения промежуточных результатов, хотя это сделает процедуру очень длинной. –

0

Передача таблицы в процедуре, перед созданием типа таблицы. , например.

CREATE TYPE TaskTable AS TABLE 
(
    Userid  varchar(20), 
    Dtime  float, 
    Utime  float, 
    Days  int 
) 

Вы можете использовать этот переменный тип таблицы в процедуре, как:

CREATE PROCEDURE yourProcName 
(
    @pTaskTable AS TaskTable READONLY 
) 
BEGIN 
--your code 
END 

я думает, используя выше образом, вы можете достичь своей цели

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