我正在编写一个脚本来创建一个视图,只有在该视图尚不存在的情况下。如果视图已经存在,我不想改变它或删除并重新创建它。下面的语法显然不完整,并且生成错误,因为CREATE VIEW
需要在它自己的批处理中 - 但是构建我的用例的正确方法是什么?
IF OBJECT_ID('dbo.view_name') IS NULL
BEGIN
CREATE VIEW [dbo].[view_name]
AS
SELECT ...;
END
ELSE
...
答案 0 :(得分:2)
SQL Server 2016有CREATE OR ALTER
。
CREATE OR ALTER VIEW vw_your_view
AS
SELECT 1 FROM your_Table
GO
如果将其移动到SQL Server 2016以下的环境中,这将会爆炸。如果是这种情况,请使用您拥有的内容并检查obj ID。
答案 1 :(得分:0)
我将SQL更改为以下内容。为避免“CREATE VIEW
必须在其自己的批处理中”错误,我将“CREATE VIEW
”包装在exec('')
语句中。这有效!
USE [XXXXXXXXX]
GO
/****** Object: View [CXXXXXXX].[_MobileMessageTracking_v2] Script Date: 5/4/2018 3:19:04 PM ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
IF Object_id('CXXXXXXX._MobileMessageTracking_v2') IS NULL BEGIN
exec('CREATE VIEW [CXXXXXXX].[_MobileMessageTracking_v2]
AS
SELECT
/* fields here */
FROM CXXXXXXXX._MobileMessageTracking AS M WITH (NOLOCK)
WHERE M.MID = XXXXXXX
AND M.CreateDateTime >= DATEADD(mm,-6, GETDATE())
UNION
select
/* fields here */')
END
GO