문제

데이터베이스 테이블이 이미 존재하는지 여부를 결정하는 휴대용 방법이 있습니까?

도움이 되었습니까?

해결책

가지고 다닐 수 있는? 나는 그렇게 생각하지 않습니다.

아마도 당신이 얻을 수있는 가장 가까운 것은 다음과 같습니다.

select * from <table>

테이블이 존재하지 않으면 오류가 반환됩니다.

다른 팁

슬프게도 휴대가 가능합니다.

select
    count(*)
from
    information_schema.tables
where
    table_name = 'tablename'
    and table_schema = 'dbo'

이것은 SQL Server, MySQL 및 Postgres에서 확실히 작동합니다. 그래도 오라클에는별로 많지 않습니다. 이를 위해 Oracle Data Dictionary에 액세스해야합니다. 그러나 오픈 소스 프로젝트가 있습니다 생성 information_schema 오라클에서 데이터 사전에서. 절대 휴대 성이 필요한 경우 시도해 볼 수 있습니다.

PS-Schema는 그럴 필요가 없습니다 dbo, 그러나 그것은 가장 흔합니다.

내가 말할 것

select 'x' from <table_name> where 0=1;

단점은 오류가 발생하면 실제 원인이 무엇인지 확실하지 않다는 것입니다. 테이블이 없거나 연결 오류가 발생할 수 있습니다. 오류 메시지를 구문 분석 할 수 있지만 확실히 휴대용은 아닙니다.

information_schema보기는 ANSI 표준이므로 가장 휴대용 옵션이어야합니다. Where 절에 스키마와 테이블 유형을 추가하는 것을 잊지 마십시오 ...

if exists(select  *
          from    information_schema.tables
          where   table_schema = 'dbo'
                  and table_name = 'MyTable'
                  and table_type = 'basetable')
begin
     -- your code here
end

다음은 합리적으로 휴대 할 수있는 것입니다.

테이블 한계 1에서 지금 ()을 선택하십시오.

특정 열에 대한 지식에 의존하지 않습니다.

카운트 (*)가 때때로 가지고있는 오버 헤드가 발생하지 않습니다.

테이블이 비어 있는지 아닌지는 중요하지 않습니다.

테이블이 존재하지 않으면 실패합니다.

모든 DBMS에는 고유 한 대사가 있으므로이를 수행하는 가장 "휴대용"방법은 응용 프로그램 호출자 자체를 사용하는 것입니다. 같은 것

try
    execute("select top 1 * from table")
    return (true)
catch
    return false

테이블을 쿼리하려고합니다. 쿼리가 실패하면 오류가 발생하면 존재하지 않습니다.

그것은 아마도 당신이 얻을 수있는만큼 휴대용 일 것입니다. 결과를 생성하는 부담은 테이블/데이터베이스를 쿼리하는 코드에 따라 다릅니다.

select top 1 *
from MyTable

다른 가능한 오류를 방지하기 위해 쿼리를 가능한 한 간단하게 유지하십시오.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top