5

私は次のSQLを持っています:

    ALTER PROCEDURE [dbo].[usp_gettasks]  
    @ID varchar(50)

    AS
     declare @PDate Date


     WHILE (DATEPART(DW, @PDate) =  1 OR DATEPART(DW, @PDate) =  7 )
     BEGIN

      set @PDate =  DATEADD(day, 1, @PDate)

     END

     CREATE VIEW tblList AS

     select tt.ItemOrder,tt.DisplayVal,  DATEADD(day, tt.DaysDue, @PDate)  from tblLine tt
     where tt.ID = 1 

次のメッセージが表示されます。

構文が正しくありません:「CreateVIEW」はバッチ内の唯一のステートメントである必要があります

GO前に入れてみCreate Viewましたが、の値が認識できませんPDate

4

1 に答える 1

11

ストアドプロシージャでビューを作成するには、動的SQLでこれを行う必要があります(特に、ビュー自体は変数を取得できないため)。これは、モジュールをより大きなスクリプトの一部として作成できないためです(のような条件付きロジックがある場合に必要となるスクリプトのようにIF <some condition> CREATE VIEW)。

DECLARE @sql nvarchar(max) = N'CREATE VIEW dbo.tblList 
    AS
      SELECT ItemOrder, DisplayVal, 
        SomeAlias = DATEADD(DAY, DaysDue, ''' 
          + CONVERT(char(8), @PDate, 112)
          + N''') FROM dbo.tblLine WHERE ID = 1;';

EXEC sys.sp_executesql @sql;

ただし、このストアドプロシージャをもう一度呼び出すと、という名前のビューを作成しようとしてdbo.tblListいて、そのビューがすでに存在しているため、失敗します。おそらく、「ストアドプロシージャでビューを作成したい」よりも高いレベルで、何をしようとしているのかを詳しく説明することができます。

于 2012-08-09T15:08:34.457 に答える