我有一个Microsoft SQL Server R2 2008.我在生命中第一次看到它 我有一个SP:
DECLARE @RC int
DECLARE @Id uniqueidentifier
DECLARE @Segment_ID uniqueidentifier
DECLARE @SDate datetime
DECLARE @EDate datetime
DECLARE @withBig bit
DECLARE @withKm bit
DECLARE @withGeo bit
DECLARE @withDescr bit
DECLARE @BusStationCursor CURSOR
SET @BusStationCursor = CURSOR FOR
SELECT Id, Segment_ID, E_Date_Begin, E_Date_Begin
FROM BusStation
OPEN @BusStationCursor
FETCH NEXT FROM @BusStationCursor INTO @ID, @Segment_ID, @SDate, @EDate
WHILE @@FETCH_STATUS = 0
BEGIN
EXECUTE @RC = [dd_ugra].[dbo].[Request_BusStation]
@Id
,@Segment_ID
,@SDate
,@EDate
,@withBig=1
,@withKm=1
,@withGeo=1
,@withDescr=1
FETCH NEXT FROM @BusStationCursor INTO @ID, @Segment_ID, @SDate, @EDate
END
CLOSE @BusStationCursor
DEALLOCATE @BusStationCursor
GO
但是我有一个静态信息所以我不想每当我想看数据时调用sp,如何使用sp结果创建表?
更新
所以我有一个什么返回一些列。我可以用sp来创建视图。我不能发布sp becouse它真的很大。
答案 0 :(得分:2)
您可以call a procedure from a view:
create view MyView as
select *
from openrowset (
'sqloledb',
'server=(local);trusted_connection=yes;',
'exec MyDatabase.dbo.MyStoredProcedure'
)
请注意,您必须对任何参数进行硬编码,否则返回proc中可能的所有记录(可能必须更改proc)并使用视图定义中的where子句或外部查询进行过滤(views don'拿参数,他们采取where子句。
此外,您可以将视图简单地定义为光标:
SELECT Id, Segment_ID, E_Date_Begin, E_Date_Begin
FROM BusStation
然后再次在外部查询中使用where子句。这会假设proc中的游标和逻辑实际上并没有改变数据,这可能是一个长镜头(为什么还需要一个游标?)。
除此之外,你必须准确理解proc正在做什么来确定你是否可以进行同样的查询(查看)。显然,如果没有proc的完整代码以及proc可能调用的任何其他proc / functions / triggers / views,SE社区就无法协助这项工作。