vistas vista ver una tipos son objetos los estructura datos cuales creadas creacion como codigo sql sql-server database stored-procedures view

sql - tipos - ¿Cómo puedo verificar si existe una vista en una base de datos?



tipos de vistas en base de datos (9)

Aunque ya hay muchas formas especificadas anteriormente, pero una de mis favoritas falta ...

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

WHERE nView es el nombre de la vista

ACTUALIZACIÓN 2017-03-25: como @hanesjw sugirió que se elimine un Procedimiento de Tienda use P lugar de V como el segundo argumento de OBJECT_ID

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

Tengo un código SQL que debe ejecutarse si existe una determinada Vista en una base de datos. ¿Cómo podría verificar si la Vista existe?

EDITAR: El DBMS que se está utilizando es Microsoft SQL Server


Esta es la forma más portátil y menos intrusiva:

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

Editar: funciona en SQL Server y no requiere que se una a sys.schemas para obtener el esquema de la vista. Esto es menos importante si todo es dbo , pero si hace un buen uso de los esquemas, debe tener esto en cuenta.

Cada RDBMS tiene su propia forma de verificar metadatos como este, pero information_schema es realmente ANSI, y creo que Oracle y aparentemente SQLite son los únicos que no lo admiten de alguna manera.


IN 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


PARA EL SERVIDOR SQL

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


Para ampliar la respuesta de Kevin.

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)); } }


Para las personas que controlan la existencia de Drop View utiliza este

Desde SQL Server 2016 CTP3 puede usar nuevas sentencias DIE en lugar de grandes contenedores IF

sintaxis

DROP VIEW [SI EXISTE] [schema_name. ] view_name [..., n] [; ]

Consulta :

DROP VIEW IF EXISTS view_name

Más información here


Si desea verificar la validez y la coherencia de todas las vistas existentes, puede usar la siguiente consulta

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;


si es Oracle, usaría la tabla "all_views".

Realmente depende de tus dbms.


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