如果存在则删除视图

新手上路,请多包涵

我有脚本,我想先删除视图然后创建它。我知道如何删除表:

 IF EXISTS (SELECT * FROM sys.tables WHERE name = 'table1' AND type = 'U') DROP TABLE table1;

所以我对视图做了同样的事情:

 IF EXISTS (SELECT * FROM sys.views WHERE name = 'view1' AND type = 'U') DROP VIEW view1;
create view1 as(......)

然后我得到了错误:

‘CREATE VIEW’ 必须是查询批处理中的第一条语句。

原文由 4est 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 551
2 个回答

你存在的语法是错误的,你应该用 go 分开 DDL,如下所示

if exists(select 1 from sys.views where name='tst' and type='v')
drop view tst;
go

create view tst
as
select * from test

您还可以使用 object_id 来检查存在测试,如下所示

if object_id('tst','v') is not null
drop view tst;
go

create view tst
as
select * from test

在 SQL 2016 中,您可以使用以下语法删除

Drop view  if exists dbo.tst

从 SQL2016 CU1 开始,您可以执行以下操作

create or alter view vwTest
as
 select 1 as col;
go

原文由 TheGameiswar 发布,翻译遵循 CC BY-SA 3.0 许可协议

DROP VIEW if exists {ViewName}
Go
CREATE View {ViewName} AS
SELECT * from {TableName}
Go

原文由 Anwar Ul-haq 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进