1

私はMicrosoftSQLServer 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が何をしているのかを正確に理解する必要があります。明らかに、SEコミュニティは、procの完全なコードと、procが呼び出す可能性のある他のproc /関数/トリガー/ビューがなければ、この作業を支援することはできません。

于 2013-01-29T18:33:19.853 に答える