테이블이 존재하는지 여부를 결정하기 위해 휴대용 SQL?
-
22-07-2019 - |
문제
데이터베이스 테이블이 이미 존재하는지 여부를 결정하는 휴대용 방법이 있습니까?
해결책
가지고 다닐 수 있는? 나는 그렇게 생각하지 않습니다.
아마도 당신이 얻을 수있는 가장 가까운 것은 다음과 같습니다.
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
다른 가능한 오류를 방지하기 위해 쿼리를 가능한 한 간단하게 유지하십시오.