![](/img/trans.png)
[英]In sybase, how would I lock a stored procedure that is executing and alter the table that the stored procedure returns?
[英]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.