Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/80.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 如何定义返回表的存储过程?_Sql_Sql Server_Sql Server 2008_Tsql - Fatal编程技术网

Sql 如何定义返回表的存储过程?

Sql 如何定义返回表的存储过程?,sql,sql-server,sql-server-2008,tsql,Sql,Sql Server,Sql Server 2008,Tsql,例如,我有以下存储过程: create procedure MyStoredProcedure as begin select * from X,Y where x.Id = Y.ID end return @table table(X.tTitle, Y.Description) 我想要返回表,在另一个查询中使用表时,请尝试以下操作: create procedure MyStoredProcedure as begin select X.*,Y.* F

例如,我有以下存储过程:

create procedure MyStoredProcedure
as
begin
    select  *
    from X,Y
    where x.Id = Y.ID
end
return @table table(X.tTitle, Y.Description)
我想要返回表,在另一个查询中使用表时,请尝试以下操作:

create procedure MyStoredProcedure
as
begin

select  X.*,Y.*
    From X INNER JOIN Y ON X.Id=Y.ID

end
CREATE PROCEDURE MyStoredProcedure
AS
    BEGIN
        SELECT  tTitle ,
                Description
        FROM    X
                JOIN Y ON Y.ID = X.ID
    END
这将选择表X和表Y中的所有数据。

请尝试以下方法:


您可以使用临时表或表变量。 像这样:

CREATE TABLE #TABLE
(
COLUMN DEFINITION
)

INSERT INTO #TABLE
EXEC <YOUR STORED PROCEDURE>
SELECT *
FROM #TABLE

DROP TABLE #TABLE
您可以将存储过程插入temp表中,以便可以将其与表一起使用。 请注意,临时表名称应以开头。

您只需创建一个过程,然后尝试以下操作:

CREATE PROCEDURE MyStoredProcedure
AS
    BEGIN
        SELECT  tTitle ,
                Description
        FROM    X
                JOIN Y ON Y.ID = X.ID
    END
存储过程1不能作为行的源组合到其他查询中-为什么它必须是存储过程?A的可表达性几乎与存储过程相同,并且可以很容易地成为另一个查询的FROM子句中的行源

比如:

create function MyFunction()
returns table
as
return (select  X.tTitle,Y.Description
    from X
    inner join Y
        on x.Id = Y.ID)

1忽略INSERT…EXEC,因为它对合成没有任何作用,而且OPENROWSET并不总是一种可行的方法。

像这样的东西你最喜欢写

CREATE PROCEDURE <SP_Name>
AS
BEGIN
    Select ......
End

你的意思是返回另一个表吗?不,我想返回存储过程的结果,并在另一个查询中使用它。你的意思是,你得到的结果是一个有3列相反的表。并且您希望在另一个查询中将指定列作为参数传递…对吗?现在,我正在寻找在第二次查询中,要作为参数传递多少列?-这在同一SP或任何其他平台上工作吗?我使用存储过程的结果不创建存储过程,例如从我的存储过程中选择*作为结果,其中X.id=result.idI我不知道您实际想要什么?你能解释一下吗?你的意思是在这个过程中使用查询来执行另一个storedprocedure吗?我创建了我的存储过程,当执行它时,我想对它执行一些操作,例如从exec mystoredprocedure中选择*,x其中result.id=x.id创建另一个过程以使用此过程的结果我使用存储过程的结果不创建存储过程例如,从my Stores中选择*作为结果,x其中x.id=result.idok您可以将存储过程结果插入临时表中,并像使用表一样使用临时表。插入到表EXEC中。但也可以使用视图而不是存储过程来实现目标。