Sql 如何检查视图是否存在,如果不存在,如何创建
如果SQL Server 2016中不存在视图,我想创建一个视图Sql 如何检查视图是否存在,如果不存在,如何创建,sql,sql-server,ssms,sql-server-2016,Sql,Sql Server,Ssms,Sql Server 2016,如果SQL Server 2016中不存在视图,我想创建一个视图 IF EXISTS(SELECT 1 FROM sys.views WHERE Name = 'VI_ALL_CITIES_AS_CATEGORY') BEGIN CREATE VIEW VI_ALL_CITIES_AS_CATEGORY AS SELECT PERSONS.FIRST_NAME AS 'Име', PERSONS.LAST_NAME AS 'Фамилия', CITIES.CITY_NAME
IF EXISTS(SELECT 1 FROM sys.views
WHERE Name = 'VI_ALL_CITIES_AS_CATEGORY')
BEGIN
CREATE VIEW VI_ALL_CITIES_AS_CATEGORY AS
SELECT PERSONS.FIRST_NAME AS 'Име', PERSONS.LAST_NAME AS 'Фамилия', CITIES.CITY_NAME AS 'Град'
FROM CITIES
LEFT JOIN PERSONS ON CITIES.ID = PERSONS.CITY_ID ;
END
但它给了我一个错误:
语法不正确:“CREATE VIEW”必须是
一批
试试这个方法
IF NOT EXISTS
(
SELECT 1
FROM sys.views
WHERE Name = 'VI_ALL_CITIES_AS_CATEGORY'
)
BEGIN
EXEC('CREATE VIEW VI_ALL_CITIES_AS_CATEGORY AS SELECT 1 as Val')
END
GO
ALTER VIEW VI_ALL_CITIES_AS_CATEGORY
AS
SELECT
PERSONS.FIRST_NAME AS 'Име',
PERSONS.LAST_NAME AS 'Фамилия',
CITIES.CITY_NAME AS 'Град'
FROM CITIES
LEFT JOIN PERSONS
ON CITIES.ID = PERSONS.CITY_ID
您有两种选择:
1) 如果您使用的是SSM或任何可以将脚本拆分为不同批次的客户端:
IF EXISTS(SELECT 'view exists' FROM INFORMATION_SCHEMA.VIEWS WHERE TABLE_NAME = N'YourViewName'AND TABLE_SCHEMA = 'YourViewSchema')
BEGIN
DROP VIEW YourViewSchema.YourViewName
END
GO -- This will make the next statement the first in it's batch
CREATE VIEW YourViewSchema.YourViewName AS
SELECT something = 1
FROM YourTable
GO
2) 如果无法将代码拆分为批处理,则必须使用动态SQL“愚弄”引擎以创建视图:
IF NOT EXISTS(SELECT 'view exists' FROM INFORMATION_SCHEMA.VIEWS WHERE TABLE_NAME = N'YourViewName'AND TABLE_SCHEMA = 'YourViewSchema')
BEGIN
DECLARE @v_ViewCreateStatement VARCHAR(MAX) = '
CREATE VIEW YourViewSchema.YourViewName AS
SELECT something = 1
FROM YourTable'
EXEC (@v_ViewCreateStatement)
END
请注意,1)如果存在,则为;2)如果不存在,则为
这是因为大多数DDL语句需要在批处理中放在第一位,所以很遗憾,您不能将CREATE
对象语句放在其他语句之后。除非我读错了您的SQL,否则您的EXISTS
正在检查是否存在,然后您尝试创建它。如果视图已经存在,则<代码>创建/代码>将失败。另一种解决方案:<代码> SET NOExEC :在中间有一个GO语句,请记住,如果该代码位于存储过程中,这将不起作用。