如何检查数据库中是否存在视图?
我有一些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