SQL Server 2008中创建视图的CASE STATEMENT

时间:2016-02-09 11:51:23

标签: sql-server sql-server-2008

我有一个创建视图查询,我想检查它是否还不存在,然后创建视图。我试着像这样创作:

CASE WHEN IS NOT EXISTS vw_Delays
THEN
VIEW vw_Delays AS
SELECT RD_RfileID_fk_ind, SUM(DATEDIFF(day, RD_Startdate, RD_EndDate)) AS delays FROM dbo.t_RfDelay
GROUP BY RD_RfileID_fk_ind
END 

但它会返回这些错误:

  

第15行,第1行,第1行,第1行   关键字' CASE'附近的语法不正确。

     

Msg 102,Level 15,State 1,Line 6
  ' END'附近的语法不正确。

如何解决这个问题?请任何人帮我解决这个问题吗?

1 个答案:

答案 0 :(得分:1)

您需要使用此代码来检查视图是否存在:

IF NOT EXISTS (SELECT * FROM sys.views WHERE Name = N'vw_Delays')
   .....

您将遇到的下一个障碍是CREATE VIEW语句必须是SQL批处理中的第一个 - 因此您无法在存在检查后立即使用它。

我通常做的恰恰相反:

  • 检查视图是否存在
  • 如果是这样 - 删除现有视图
  • 然后从头开始创建视图

我将此代码用于此设置:

IF EXISTS (SELECT * FROM sys.views WHERE Name = N'vw_Delays')
   DROP VIEW dbo.vw_Delays;
GO

CREATE VIEW dbo.vw_Delays 
AS
   SELECT 
       RD_RfileID_fk_ind, 
       SUM(DATEDIFF(day, RD_Startdate, RD_EndDate)) AS delays 
   FROM 
       dbo.t_RfDelay
   GROUP BY 
       RD_RfileID_fk_ind