Laboratory/MSSQL

[SQL] sysobjects

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

-- 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')


작성자: 김정선(visualdb@unitel.co.kr)
출처 : 데브피아(http://www.devpia.com/)