IT story

뷰가 데이터베이스에 있는지 어떻게 확인합니까?

hot-time 2020. 7. 12. 09:35
반응형

뷰가 데이터베이스에 있는지 어떻게 확인합니까?


특정 뷰가 데이터베이스에 존재하는 경우 실행 해야하는 SQL 코드가 있습니다. 뷰가 존재하는지 확인하려면 어떻게해야합니까?

편집 : 사용중인 DBMS는 Microsoft SQL Server입니다.


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대신 저장 프로 시저 사용을 삭제하도록 제안했습니다.VOBJECT_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당신은 새 사용할 수 있습니다 다이 문 대신 큰 IF래퍼를

통사론

DROP VIEW [존재하는 경우] [schema_name. ] 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;

SQL Server에서

declare @ViewName nvarchar(20)='ViewNameExample'

if exists(SELECT 1 from sys.objects where object_Id=object_Id(@ViewName) and Type_Desc='VIEW')
begin
    -- Your SQL Code goes here ...

end

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));
        }
    }

참고URL : https://stackoverflow.com/questions/1306009/how-can-i-check-if-a-view-exists-in-a-database

반응형