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 

我收到以下消息:

语法不正确:“Create VIEW”必须是批处理中的唯一语句

GO我之前试过 put 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 回答