Antworten:
FÜR SQL Server
IF EXISTS(select * FROM sys.views where name = '')
Es gibt bereits viele Möglichkeiten, die oben angegeben wurden, aber eine meiner Favoriten fehlt.
GO
IF OBJECT_ID('nView', 'V') IS NOT NULL
DROP VIEW nView;
GO
WO nViewist der Name der Ansicht
UPDATE 2017-03-25: wie @hanesjw vorgeschlagen hat, eine Speicherprozedur zu löschen, Panstatt Vals zweites Argument vonOBJECT_ID
GO
IF OBJECT_ID( 'nProcedure', 'P' ) IS NOT NULL
DROP PROCEDURE dbo.sprocName;
GO
Dies ist der tragbarste und am wenigsten aufdringliche Weg:
select
count(*)
from
INFORMATION_SCHEMA.VIEWS
where
table_name = 'MyView'
and table_schema = 'MySchema'
Bearbeiten: Dies funktioniert unter SQL Server und erfordert nicht, dass Sie beitreten sys.schemas, um das Schema der Ansicht abzurufen. Dies ist weniger wichtig, wenn alles vorhanden ist dbo, aber wenn Sie Schemata gut nutzen, sollten Sie dies berücksichtigen.
Jedes RDBMS hat seine eigene kleine Möglichkeit, solche Metadaten zu überprüfen, ist aber information_schematatsächlich ANSI, und ich denke, Oracle und anscheinend SQLite sind die einzigen, die es in irgendeiner Weise nicht unterstützen.
if exists (SELECT * FROM sys.views WHERE object_id = OBJECT_ID(N'[dbo].[MyTable]') )
ViewVerwenden Sie dies für Personen, die die Existenz überprüfen, um sie fallen zu lassen
Von können SQL Server 2016 CTP3Sie neue DIE- Anweisungen anstelle von großen IFWrappern verwenden
Syntax
DROP VIEW [IF EXISTS] [Schemaname. ] view_name [..., n] [; ]]
Abfrage:
DROP VIEW IF EXISTS view_name
Mehr Infos hier
Wenn es Oracle ist, würden Sie die Tabelle "all_views" verwenden.
Es hängt wirklich von Ihren DBMS ab.
Wenn Sie die Gültigkeit und Konsistenz aller vorhandenen Ansichten überprüfen möchten, können Sie die folgende Abfrage verwenden
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;
Um Kevins Antwort zu erweitern.
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));
}
}
Sie können die Verfügbarkeit der Ansicht auf verschiedene Arten überprüfen
FÜR SQL Server
benutze 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
benutze sysobjects
IF NOT EXISTS (
SELECT 1
FROM sysobjects
WHERE NAME = '[schemaName].[ViewName]'
AND xtype = 'V'
)
BEGIN
PRINT 'View Exists'
END
Verwenden Sie sys.views
IF EXISTS (
SELECT 1
FROM sys.views
WHERE OBJECT_ID = OBJECT_ID(N'[schemaName].[ViewName]')
)
BEGIN
PRINT 'View Exists'
END
Verwenden Sie INFORMATION_SCHEMA.VIEWS
IF EXISTS (
SELECT 1
FROM INFORMATION_SCHEMA.VIEWS
WHERE table_name = 'ViewName'
AND table_schema = 'schemaName'
)
BEGIN
PRINT 'View Exists'
END
Verwenden Sie OBJECT_ID
IF EXISTS(
SELECT OBJECT_ID('ViewName', 'V')
)
BEGIN
PRINT 'View Exists'
END
Verwenden Sie 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.