首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> SQL Server 資料庫 >> 關於SqlServer

SQL Server 建立 View 前判斷是否存在的正確寫法

     編輯:關於SqlServer

直接在 IF NOT EXISTS 區塊中執行 CREATE VIEW 會報錯:

Msg 156, Level 15, State 1, Line 4
Incorrect syntax near the keyword 'view'.

原因:CREATE VIEW 必須是批次中的第一條陳述式,不能包裹在 IF 或 BEGIN...END 內。

正確解法:先 DROP 再 CREATE,或使用動態 SQL

方法一:分兩個批次(推薦)

IF EXISTS (SELECT 1 FROM sys.views WHERE name = 'Report_IndividualTicket')
    DROP VIEW Report_IndividualTicket;
GO

CREATE VIEW Report_IndividualTicket AS
SELECT Ticket.TicketNumber, Ticket.TicketID, GisProcess.StageName, 
       Content.DtReceived, Content.ContentText
FROM (GisProcess INNER JOIN Ticket ON GisProcess.TicketID = Ticket.TicketID)
     INNER JOIN Content ON Ticket.ContentID = Content.ContentID;
GO

GO 為批次分隔符,確保 CREATE VIEW 位於新批次首行。

方法二:動態 SQL(單批次)

DECLARE @sql NVARCHAR(MAX) = N'
CREATE VIEW Report_IndividualTicket AS
SELECT Ticket.TicketNumber, Ticket.TicketID, GisProcess.StageName, 
       Content.DtReceived, Content.ContentText
FROM (GisProcess INNER JOIN Ticket ON GisProcess.TicketID = Ticket.TicketID)
     INNER JOIN Content ON Ticket.ContentID = Content.ContentID;';

IF NOT EXISTS (SELECT 1 FROM sys.views WHERE name = 'Report_IndividualTicket')
    EXEC sp_executesql @sql;

最佳實務建議

  • 部署腳本建議採用「DROP IF EXISTS → CREATE」模式(SQL Server 2016+ 支援 DROP VIEW IF EXISTS)。
  • 避免在單一批次中混合 DDL 與流程控制。
  • 使用 sys.views 而非 sysobjects,語意更清晰。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved