我有以下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
我收到以下消息:
语法错误:“创建视图”必须是批处理中的唯一语句
我尝试将GO
放在Create View
之前,但是它无法识别PDate
的值。
答案 0 :(得分: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
的视图,并且该视图已经存在。也许您可以详细说明您正在尝试的内容,其级别高于“我想在存储过程中创建视图”。