답변:
SQL 서버
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 는 두 번째 인수 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]') )
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;
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));
}
}
다양한 방법으로보기의 가용성을 확인할 수 있습니다
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
여기 에 참여하고 싶을 것입니다.