如何检查数据库中是否存在视图?

我有一些SQL代码需要执行,如果一个特定的视图存在于数据库中。 我将如何去检查视图是否存在?

编辑:正在使用的DBMS是Microsoft SQL Server

FOR SQL SERVER

IF EXISTS(select * FROM sys.views where name = '') 

虽然上面已经有很多方法,但我最喜欢的一个就是失踪..

 GO IF OBJECT_ID('nView', 'V') IS NOT NULL DROP VIEW nView; GO 

其中nView是视图的名称

UPDATE 2017-03-25:作为@ hanesjwbuild议删除存储过程使用P而不是V作为OBJECT_ID的第二个参数

 GO IF OBJECT_ID( 'nProcedure', 'P' ) IS NOT NULL DROP PROCEDURE dbo.sprocName; GO 

这是最便携,最不干扰的方式:

 select count(*) from INFORMATION_SCHEMA.VIEWS where table_name = 'MyView' and table_schema = 'MySchema' 

编辑:这在SQL Server上工作,它不需要你join到sys.schemas来获取视图的模式。 如果所有的东西都是dbo ,这个就不那么重要了,但是如果你很好地利用了模式,那么你应该牢记这一点。

每个RDBMS都有自己的检查元数据的小方法,但是information_schema实际上是ANSI,我认为Oracle和SQLite显然是唯一不以某种方式支持它的。

 if exists (SELECT * FROM sys.views WHERE object_id = OBJECT_ID(N'[dbo].[MyTable]') ) 

对于检查存在删除View使用这个

SQL Server 2016 CTP3您可以使用新的DIE语句而不是大的IF包装

句法

DROP VIEW [如果存在] [schema_name。 ] view_name […,n] [; ]

查询:

 DROP VIEW IF EXISTS view_name 

更多信息在这里

如果是Oracle,则使用“all_views”表。

这真的取决于你的DBMS。

如果要检查所有现有视图的有效性和一致性,可以使用以下查询

 declare @viewName sysname declare @cmd sysname DECLARE check_cursor CURSOR FOR SELECT cast('['+SCHEMA_NAME(schema_id)+'].['+name+']' as sysname) AS viewname FROM sys.views OPEN check_cursor FETCH NEXT FROM check_cursor INTO @viewName WHILE @@FETCH_STATUS = 0 BEGIN set @cmd='select * from '+@viewName begin try exec (@cmd) end try begin catch print 'Error: The view '+@viewName+' is corrupted .' end catch FETCH NEXT FROM check_cursor INTO @viewName END CLOSE check_cursor; DEALLOCATE check_cursor; 

扩大凯文的答案。

  private bool CustomViewExists(string viewName) { using (SalesPad.Data.DataConnection dc = yourconnection) { System.Data.SqlClient.SqlCommand cmd = new System.Data.SqlClient.SqlCommand(String.Format(@"IF EXISTS(select * FROM sys.views where name = '{0}') Select 1 else Select 0", viewName)); cmd.CommandType = CommandType.Text; return Convert.ToBoolean(dc.ExecuteScalar(cmd)); } } 

在SQL Server中,

 declare @ViewName nvarchar(20)='ViewNameExample' if exists(SELECT 1 from sys.objects where object_Id=object_Id(@ViewName) and Type_Desc='VIEW') begin -- Your SQL Code goes here ... end