回答:
SQLサーバー
IF EXISTS(select * FROM sys.views where name = '')
上で指定した方法はすでにたくさんありますが、私のお気に入りの1つがありません。
GO
IF OBJECT_ID('nView', 'V') IS NOT NULL
DROP VIEW nView;
GO
どこ nView
はビューの名前です
更新2017-03-25: @hanesjwが、2番目の引数としてでは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だけです。
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サーバー
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
sysobjectsを使用する
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
ここに参加したいでしょう。