2011-07-06 2 views
19

데이터베이스에 테이블이 있는지 확인하고 테이블이 존재하지 않는 경우이를 작성하려고합니다. 현재 데이터베이스의 모든 테이블 목록을 얻으려면 어떻게합니까?MS SQL 2008을 사용하여 데이터베이스에서 테이블 목록을 가져 오는 방법은 무엇입니까?

나는이 같은 SELECT와 데이터베이스 목록을 얻을 수 : 존재하지 않는 경우 남아있는 어떤

SELECT * FROM sys.databases 

테이블을 만드는 것입니다.

if not exists(select * from sys.databases where name = 'db') 
begin 
    create database [db] 
    use [db]; 
    create table [test] (
     Time datetime, 
     Message varchar(1024)) 
    end 

을하지만 'DB'는 존재하지 않는다고 말하면서 '사용'줄에 나에게 오류를 제공합니다

나는 또한이 같은 데이터베이스와 같은 시간에 테이블을 만들려고. 이번에는 두 가지 명령으로이 작업을 시도 할 것입니다.

답변

38

데이터베이스에 당신에게 모든 테이블을 얻을 것이다

SELECT Distinct TABLE_NAME FROM information_schema.TABLES 

그래서 당신에게이 비슷한 사용할 수 있습니다 데이터베이스 검사.

If NOT EXISTS(SELECT Distinct TABLE_NAME FROM information_schema.TABLES Where TABLE_NAME = 'Your_Table') 
BEGIN 
    --CREATE TABLE Your_Table 
END 
GO 
9

이 쿼리는이 데이터베이스에 당신에게 모든 테이블의 목록을 제공한다

USE [DatabaseName]; 

SELECT * FROM information_schema.tables; 
5

제목의 질문에 대답, 당신은 테이블의 존재를 확인하기 위해 sys.tables 또는 type = 'U'sys.objects을 조회 할 수 있습니다. OBJECT_ID ('table_name', 'U')를 사용할 수도 있습니다. 이 null이 아닌 값을 반환하면 다음 테이블이 존재합니다

IF (OBJECT_ID('dbo.My_Table', 'U') IS NULL) 
BEGIN 
    CREATE TABLE dbo.My_Table (...) 
END 

당신은 DB_ID()과 데이터베이스에 대해 동일한 작업을 수행 할 수 있습니다

IF (DB_ID('My_Database') IS NULL) 
BEGIN 
    CREATE DATABASE My_Database 
END 

데이터베이스를 만든 다음 사용을 시작하려면 그것을 별도의 배치로 처리해야합니다. 나는 귀하의 사건에 대해 구체적으로 알지 못하지만, 이것이 가능하지 않은 경우가 많지는 않습니다. SQL 스크립트에서는 GO 문을 사용할 수 있습니다. 응용 프로그램에서는 데이터베이스를 만든 후에 새 명령을 보낼 정도로 쉽습니다.

문제가 발생할 수있는 유일한 곳은 저장 프로 시저에서이 작업을 수행하고 데이터베이스를 작성하는 것이 일반적으로 좋지 않은 경우입니다.

CREATE DATABASE Test_DB2 

IF (OBJECT_ID('Test_DB2.dbo.My_Table', 'U') IS NULL) 
BEGIN 
    EXEC('CREATE TABLE Test_DB2.dbo.My_Table (my_id INT)') 
END 

편집 : 다른 사람이 당신이 정말로 하나 개의 배치에서이 작업을 수행해야하는 경우

, 당신은 존재하지 않는 데이터베이스의 구문 분석 오류를 해결하기 위해 EXEC를 사용하여 문제를 해결 얻을 수 있습니다 아마도 INFORMATION_SCHEMA.TABLES 시스템보기가 아마도 앞으로 나아갈 표준이며 아마도 RDBMS 사이에 있기 때문에 바람직 할 것입니다.

+0

감사합니다. 아주 좋은 답변을 주셨지만, SQL 초보자도 조금 앞선 것으로 보입니다. 고맙습니다. – Tibi

관련 문제