2012-08-09 7 views
5

私は、次のSQL持っているバッチ内の唯一のステートメントでなければなりません。「VIEWを作成」

構文が正しくありません:私は、次のメッセージが表示されます

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 

「VIEWを作成する」でなければなりませんバッチ

で唯一のステートメントは、私がCreate ViewGOを入れてみましたが、それはPDateの価値を認識することはできません。

+2

ストアドプロシージャでビューを作成するのはなぜですか? –

答えて

10

ストアドプロシージャでビューを作成するには、動的SQLでビューを作成する必要があります(特に、ビュー自体は変数を取ることができないため)。

DECLARE @sql NVARCHAR(MAX); 
SET @sql = 'CREATE VIEW dbo.tblList 
    AS 
     SELECT ItemOrder, DisplayVal, 
     SomeAlias = DATEADD(DAY, DaysDue, ''' + CONVERT(CHAR(8), @PDate, 112) 
     + ''') FROM dbo.tblLine WHERE ID = 1;'; 
EXEC sp_executesql @sql; 

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

+1

彼は「IF NOT EXISTS(SELECT 1 FROM information_schema.columns WHERE TABLE_NAME = 'tblList')BEGIN CREATE VIEW ... END」と言って作成を避けることができます。私はこれをやろうとしていますが、@NatePetが引用したのと同じエラーが出ます。私はsrsly全体の文を文字列に入れる必要がありますか?なぜALTER VIEWはそのように動作しますか? –

関連する問題