T-SQLには、IF NOT EXISTS
は含まれていません CREATE TABLE
を含む句 他のDBMSと同様に、ステートメント。
したがって、SQL Serverでテーブルを作成する前にテーブルの存在を確認する場合は、他の方法を使用する必要があります。
オプション1:オブジェクトIDを確認する
SQL Serverでは、OBJECT_ID()
を使用できます テーブルを作成する前に、テーブルの存在を確認する関数:
IF OBJECT_ID(N'dbo.t1', N'U') IS NULL
CREATE TABLE dbo.t1 (
c1 int,
c2 varchar(10)
);
GO
上記の例では、オブジェクトIDでdbo.t1
を確認しています。 テーブル。
OBJECT_ID()
の2番目の引数 探しているオブジェクトのタイプを指定します。この場合、U
を使用します 、これは「ユーザー定義テーブル」用です。
OBJECT_ID()
スキーマスコープのオブジェクトのデータベースオブジェクト識別番号を返します。オブジェクトが存在しない場合、またはオブジェクトにアクセスできない場合、関数はNULLを返します。したがって、NULL値をチェックし、この関数がNULLを返す場合にのみテーブルを作成できます。
OBJECT_ID()
を使用できます 作成されたテーブルのオブジェクトIDを確認する関数:
SELECT OBJECT_ID(N'dbo.t1', N'U');
結果の例:
354100302
もう少し情報が必要な場合は、次のようにすることができます:
sp_tables 't1';
結果:
+-------------------+---------------+--------------+--------------+-----------+ | TABLE_QUALIFIER | TABLE_OWNER | TABLE_NAME | TABLE_TYPE | REMARKS | |-------------------+---------------+--------------+--------------+-----------| | KrankyKranes | dbo | t1 | TABLE | NULL | +-------------------+---------------+--------------+--------------+-----------+
ここでは、KrankyKranes
テーブルを作成したデータベースです。
既存のテーブルを確認する方法は他にもたくさんあります。例については、SQLServerにテーブルが存在するかどうかを確認する6つの方法を参照してください。
オプション2:クエリsys.tables
テーブルがすでに存在するかどうかを確認する別の方法は、sys.tables
にクエリを実行することです。 システムカタログビュー。
例:
IF NOT EXISTS (
SELECT * FROM sys.tables t
JOIN sys.schemas s ON (t.schema_id = s.schema_id)
WHERE s.name = 'dbo' AND t.name = 't1')
CREATE TABLE dbo.t1 (
c1 int,
c2 varchar(10)
);
これは前の例と同様のことをします。テーブルの存在をチェックし、存在しない場合にのみテーブルを作成します。
テーブルの存在を確認するために使用される方法に関係なく、テーブルが存在するかどうかに関係なく、コマンドは正常に完了します。
したがって、両方のメソッドから次の出力が得られます。
Commands completed successfully.
テーブルがすでに存在するかどうかに関係なく、そのメッセージが表示されます。
テーブルがすでに存在しているが、テーブルの存在を確認していない場合、次のようなエラーが発生します。
Msg 2714, Level 16, State 6, Line 1 There is already an object named 't1' in the database.
その名前のテーブルがデータベースにすでに存在しているからといって、それが正しい定義を持っていることを意味するわけではないことに注意することが重要です。上記のメソッドは、名前とスキーマでテーブルをチェックするだけです。