如何将表变量传递给SQL-Server 2014中的存储过程

时间:2015-10-07 12:08:15

标签: sql sql-server sql-server-2008

我是SQL-Server的新手。我有多个程序。 Procedure1根据int值过滤数据,如下所示。

Procedure1 '70'

Another1 Procedure2,分析procedure1输出并根据两个值

再次过滤它
Procedure2 '10', '20'

现在我想编写一个Main过程,它接收3个参数,然后首先将第一个参数传递给Procedure1,然后procedure2接收Procedure1的输出和第二个和第三个参数以执行分析。

主程序的代码是

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

2 个答案:

答案 0 :(得分: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不是一种编程语言,而是查询语言。

答案 1 :(得分:1)

在过程中传递表,您需要在创建表类型之前。 e.g。

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

我认为使用上述方式,您可以实现目标