Відповіді:
ДЛЯ SQL SERVER
IF EXISTS(select * FROM sys.views where name = '')
Вище вказано багато способів, але одного з моїх улюблених немає.
GO
IF OBJECT_ID('nView', 'V') IS NOT NULL
DROP VIEW nView;
GO
ДЕ nView
- назва зору
ОНОВЛЕННЯ 2017-03-25: як @hanesjw запропонував відмовитись від використання процедури Store, 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, і це не вимагає від вас приєднання, 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
обгорток
синтаксис
ПЕРЕГЛЯД ДРОПУ [ЯКЩО ВИНАЄТЬСЯ] [схема_назва. ] 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
використовувати 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
використовувати сисобекти
IF NOT EXISTS (
SELECT 1
FROM sysobjects
WHERE NAME = '[schemaName].[ViewName]'
AND xtype = 'V'
)
BEGIN
PRINT 'View Exists'
END
використовувати sys.views
IF EXISTS (
SELECT 1
FROM sys.views
WHERE OBJECT_ID = OBJECT_ID(N'[schemaName].[ViewName]')
)
BEGIN
PRINT 'View Exists'
END
використовувати INFORMATION_SCHEMA.VIEWS
IF EXISTS (
SELECT 1
FROM INFORMATION_SCHEMA.VIEWS
WHERE table_name = 'ViewName'
AND table_schema = 'schemaName'
)
BEGIN
PRINT 'View Exists'
END
використовувати OBJECT_ID
IF EXISTS(
SELECT OBJECT_ID('ViewName', 'V')
)
BEGIN
PRINT 'View Exists'
END
використовувати 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
тут долучитися .