我是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
答案 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
我认为使用上述方式,您可以实现目标