直接在 IF NOT EXISTS 區塊中執行 CREATE VIEW 會報錯:
Msg 156, Level 15, State 1, Line 4 Incorrect syntax near the keyword 'view'.
原因:CREATE VIEW 必須是批次中的第一條陳述式,不能包裹在 IF 或 BEGIN...END 內。
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 位於新批次首行。
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)。sys.views 而非 sysobjects,語意更清晰。