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]'') )