2011-07-06 9 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 

しかし、それは「デシベル」は存在しないことを言って、私に「使用」の行にエラーが発生します。今回は、2つのコマンドでこれを実行しようとします。

答えて

38

を取得しますデータベースチェック。あなたのタイトルに質問に答える

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

このクエリでは、あなたに似たそれを使用することができますので、これはあなたのデータベースにあなたの

SELECT Distinct TABLE_NAME FROM information_schema.TABLES 

のすべてのテーブルのリストを与えるべきであるあなたに、データベース内のすべてのテーブル

USE [DatabaseName]; 

SELECT * FROM information_schema.tables; 
5

、あなたはテーブルの存在を確認するためにsys.tablessys.objectstype = 'U'を照会することができます。 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 

EDIT:他の人が持っているとして、あなたは本当に1つのバッチでこれを実行する必要がある場合は

、あなたは存在しないデータベースの解析エラーを回避するためにEXECを使用することによって、問題を回避することができますおそらく標準であり、おそらくはRDBMS間の標準であるため、INFORMATION_SCHEMA.TABLESというシステムビューがおそらく好ましいでしょう。

+0

ありがとう、あなたは非常に良い答えを与えましたが、ちょうどSQLの初心者のために少し進んでいるようです。どうもありがとうございました。 – Tibi

関連する問題