본문 바로가기
IT-개발,DB

[MS SQL] DB 테이블 존재여부 확인하기

by SB리치퍼슨 2016. 9. 6.

[MS SQL] DB 테이블 존재여부 확인하기

MS SQL SERVER 에서 DB 테이블 존재여부 확인하기

++++++++++++++++++++++++++++++++++++++++++++++++++
+ 1
++++++++++++++++++++++++++++++++++++++++++++++++++

MS SQL 테이블 존재여부

sql = " IF object_id('테이블명') IS NOT NULL SELECT count(*) as count FROM 테이블명 where etc1='" & domain_addr & "' "

테이블이 있으명 실행


sql = sql & " IF object_id('테이블명')IS NULL SELECT count(*) as count FROM 다른테이블명 "

테이블이없으면 다른테이블 실행

++++++++++++++++++++++++++++++++++++++++++++++++++
+ 2
++++++++++++++++++++++++++++++++++++++++++++++++++

MS SQL 테이블 존재 여부 확인방법 #2

테이블 존재 여부를 확인하는 다양한 방법들을 볼까요.
여기서는 기본적인 몇 가지만 살펴보겠습니다.
쿼리 분석기를 이용해서 테스트 해 보세요.

-- northwind DB에 orders 테이블을 테스트합니다.
USE northwind

-- 아래 코드는 SQL Server 스크립팅 엔진이 생성하는 일반적인 코드입니다.
IF EXISTS(SELECT * FROM dbo.sysobjects WHERE id = object_id(N'dbo.orders')
     AND objectproperty(id, N'IsUserTable') = 1)
  SELECT '존재'

-- INFORMATION_SCHEMA owner의 TABLES 뷰를 이용해도 확인할 수 있죠.
IF EXISTS(SELECT * FROM information_schema.tables
     WHERE  table_name = 'orders' AND table_schema='dbo')
  SELECT '존재'

-- 가장 단순한 방법은 obejct_id 함수를 이용하는 방법입니다.
-- N'' 은 문자열이 유니코드형임을 나타내는 지시어입니다.
IF object_id(N'dbo.orders') IS NOT NULL
  SELECT '존재'

-- 이렇게도 가능하죠. 'U'는 sysobjects 테이블의 xtype 컬럼 값입니다.
IF object_id(N'dbo.orders', 'U') IS NOT NULL
  SELECT '존재'

-- 임시 테이블의 경우는 TEMPDB에 작성되므로 다음과 같이 사용할 수 있죠.
IF object_id(N'tempdb.dbo.#temptable') IS NOT NULL
  SELECT '존재'

/*
결론적으로 위의 모든 방법들은, sysobjects 시스템 테이블을 이용한다는
사실입니다.
sysobjects 시스템 테이블은 오브젝트의 가장 근본이 되는 중요한 테이블입니다.
이 시스템 테이블에 대해서 많은 공부 하시면 큰 도움이 되실겁니다.
*/
SELECT * FROM dbo.sysobjects
  WHERE id = object_id('dbo.orders')




SELECT COUNT(NAME) CNT FROM SYSOBJECTS WHERE TYPE = 'U' AND NAME='테이블이름'



count(name) > 0 이면 존재


출처 : 데브피아

++++++++++++++++++++++++++++++++++++++++++++++++++
+ 3
++++++++++++++++++++++++++++++++++++++++++++++++++

MS SQL 2000 테이블 존재여부

테이블 존재여부 확인을 위한 최적의방안]

시스템 테이블을 이용하시는 방안이 있습니다. 

MSSQL2000의 각 DB마다 시스템관련 저장 프로시져를 가지고 있으며, 전체 DB 즉 master DB에서 전체 DB 및 전체 Column등 대부분을 관리를 하고있습니다.

use master
go

Select * From sysobjects where xtype = 'U' 를 하시면 사용자가 직접만든 테이블 목록이 촤르르 펼쳐집니다. 여기서 응용력을 발휘하셔서

SELECT *
FROM sysobjects
WHERE xtype = 'U' AND
name = '{알고자하는테이블명}' 

또는 

SELECT Count(*)
FROM sysobjects
WHERE xtype = 'U' AND
name = '{알고자하는테이블명}' 

을 지정하셔서 건수가 0건이면 없는것이며, 1건이면 존재하는 방식으로 체크하는 방안이 있습니다.

위 의 시스템DB를 뒤져서 체크하는 방안이 제일 안전한 방안이며, 통상 MSSQL을 사용하고 있는 기업중 대부분의 프로젝트상에서 위방식이 가장 안전한 방식이며, 단점은 DB Query를 해야하기때문에 네트워크 트래픽부분상 시간소모가 된다는 점입니다.( 약 0.001초 이내 )

 

 

 

반응형

댓글