簡體   English   中英

如何定義返回表的存儲過程?

[英]How do I define a stored procedure that returns table?

例如,我有這個存儲過程:

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

我想要返回表以及在其他查詢中使用表時

存儲過程不能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並不總是可行的方法。

嘗試這個:

create procedure MyStoredProcedure
as
begin

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

end

這將從表X和Y中選擇所有數據。

嘗試這種方式:

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

您可以簡單地創建一個Procedure ,然后嘗試以下操作:

CREATE PROCEDURE MyStoredProcedure
AS
    BEGIN
        SELECT  tTitle ,
                Description
        FROM    X
                JOIN Y ON Y.ID = X.ID
    END

您可以使用臨時表或表變量。 像這樣:

CREATE TABLE #TABLE
(
COLUMN DEFINITION
)

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

DROP TABLE #TABLE

您可以將存儲過程插入temp表中,以便可以將其與表一起使用。 請注意,臨時表名稱應以#開頭。

你最喜歡寫的東西

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM