1

我有一个 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 来创建视图。我不能发布 sp 因为它真的很大。

4

1 回答 1

2

您可以从视图中调用过程

create view MyView as
    select *
    from openrowset (
        'sqloledb',
        'server=(local);trusted_connection=yes;',
        'exec MyDatabase.dbo.MyStoredProcedure'
    )

请注意,您必须对任何参数进行硬编码,或者从 proc 返回所有可能的记录(可能必须更改 proc)并在视图定义或外部查询中使用 where 子句进行过滤(视图不接受参数,他们采用 where 子句)。

此外,您可以让您的视图只是光标的定义:

SELECT Id, Segment_ID, E_Date_Begin, E_Date_Begin
FROM BusStation

然后再次在外部查询中使用 where 子句。这将假设 proc 中的光标和逻辑实际上并没有改变数据,这可能是一个很长的镜头(为什么它需要一个光标?)。

除此之外,您还必须准确了解 proc 正在做什么以确定您是否可以进行执行相同操作的查询(视图)。显然,如果没有 proc 的完整代码以及 proc 可能调用的任何其他 procs/functions/triggers/views,SE 社区将无法协助这项工作。

于 2013-01-29T18:33:19.853 回答