-1

例如我有这个存储过程:

create procedure MyStoredProcedure
as
begin
    select  *
    from X,Y
    where x.Id = Y.ID
end
return @table table(X.tTitle, Y.Description)

我想要返回表以及在另一个查询中使用表时

4

6 回答 6

3

存储过程不能1组合成其他查询作为行的来源 - 是否有理由必须是存储过程?用户定义的函数具有与存储过程几乎相同的可表达性,并且可以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并不总是可行的方法。

于 2013-10-29T07:42:53.717 回答
2

试试这个:

create procedure MyStoredProcedure
as
begin

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

end

这将从表 X 和 Y 中选择所有数据。

于 2013-10-29T05:46:31.050 回答
2

试试这种方式:

CREATE PROCEDURE [dbo].[MyStoredProcedure]

    AS
    BEGIN
        -- SET NOCOUNT ON added to prevent extra result sets from
        -- interfering with SELECT statements.
        SET NOCOUNT ON;
        Declare @ID int
         set @ID =(select ID From X INNER JOIN Y ON X.Id=Y.ID)
         IF @ID > 0
         BEGIN
               return @table table(X.tTitle,Y.Description)
         END
    END
于 2013-10-29T05:47:24.270 回答
1

你可以简单地创建一个Procedure然后,试试这个:

CREATE PROCEDURE MyStoredProcedure
AS
    BEGIN
        SELECT  tTitle ,
                Description
        FROM    X
                JOIN Y ON Y.ID = X.ID
    END
于 2013-10-29T05:49:37.097 回答
0

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

CREATE TABLE #TABLE
(
COLUMN DEFINITION
)

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

DROP TABLE #TABLE

您可以将存储过程插入到临时表中,这样您就可以像使用表一样使用它。请注意,临时表名称应以 # 开头。

于 2013-10-29T05:47:53.103 回答
0

像这样的东西你最写

CREATE PROCEDURE <SP_Name>
AS
BEGIN
    Select ......
End
于 2013-10-30T06:44:39.733 回答