Respuestas:
PARA SERVIDOR SQL
IF EXISTS(select * FROM sys.views where name = '')
Ya hay muchas formas especificadas anteriormente, pero falta una de mis favoritas ...
GO
IF OBJECT_ID('nView', 'V') IS NOT NULL
DROP VIEW nView;
GO
DONDE nView
está el nombre de la vista
ACTUALIZACIÓN 2017-03-25: como @hanesjw sugirió eliminar un uso de Procedimiento de tienda en P
lugar de V
como el segundo argumento deOBJECT_ID
GO
IF OBJECT_ID( 'nProcedure', 'P' ) IS NOT NULL
DROP PROCEDURE dbo.sprocName;
GO
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: esto funciona en SQL Server, y no requiere que se una sys.schemas
para obtener el esquema de la vista. Esto es menos importante si todo lo es dbo
, pero si estás haciendo un buen uso de los esquemas, entonces debes tenerlo en cuenta.
Cada RDBMS tiene su propia pequeña forma de verificar metadatos como este, pero en information_schema
realidad es ANSI, y creo que Oracle y aparentemente SQLite son los únicos que no lo admiten de alguna manera.
if exists (SELECT * FROM sys.views WHERE object_id = OBJECT_ID(N'[dbo].[MyTable]') )
Para las personas que comprueban la existencia para descartar, View
use este
Desde SQL Server 2016 CTP3
usted puede usar nuevas declaraciones DIE en lugar de grandes IF
envoltorios
sintaxis
VISTA DE GOTA [SI EXISTE] [nombre_esquema. ] view_name [..., n] [; ]
Consulta :
DROP VIEW IF EXISTS view_name
Más información aquí.
si es Oracle, usaría la tabla "all_views".
Realmente depende de tus dbms.
Si desea verificar la validez y consistencia 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;
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));
}
}
Puede verificar la disponibilidad de la vista de varias maneras
PARA SERVIDOR SQL
use sys.objects
IF EXISTS(
SELECT 1
FROM sys.objects
WHERE OBJECT_ID = OBJECT_ID('[schemaName].[ViewName]')
AND Type_Desc = 'VIEW'
)
BEGIN
PRINT 'View Exists'
END
usar sysobjects
IF NOT EXISTS (
SELECT 1
FROM sysobjects
WHERE NAME = '[schemaName].[ViewName]'
AND xtype = 'V'
)
BEGIN
PRINT 'View Exists'
END
use sys.views
IF EXISTS (
SELECT 1
FROM sys.views
WHERE OBJECT_ID = OBJECT_ID(N'[schemaName].[ViewName]')
)
BEGIN
PRINT 'View Exists'
END
use INFORMATION_SCHEMA.VIEWS
IF EXISTS (
SELECT 1
FROM INFORMATION_SCHEMA.VIEWS
WHERE table_name = 'ViewName'
AND table_schema = 'schemaName'
)
BEGIN
PRINT 'View Exists'
END
usar OBJECT_ID
IF EXISTS(
SELECT OBJECT_ID('ViewName', 'V')
)
BEGIN
PRINT 'View Exists'
END
use sys.sql_modules
IF EXISTS (
SELECT 1
FROM sys.sql_modules
WHERE OBJECT_ID = OBJECT_ID('[schemaName].[ViewName]')
)
BEGIN
PRINT 'View Exists'
END
sys.schema
aquí también.