にテーブルが存在するかどうかを確認する方法SqlHints.com

テーブルが存在するかどうかに基づいてコードを実行する必要があるシナリオに何度も遭遇します。 この記事では、一般的に使用されているさまざまなアプローチとその長所と短所を一覧表示します。 覚えやすいので、OBJECT_ID()関数を使用することをお勧めします。 私はあなたが使用するアプローチと同じ理由を知ってみましょう。これらの異なるアプローチをデモするには、以下のスクリプトでテーブルを持つサンプルデータベースを作成しましょう。

CREATE DATABASE SqlHintsDemoDBGOUSE SqlHintsDemoDBGOCREATE TABLE dbo.Customers (CustId INT, Name NVARCHAR(50))

一時テーブルがSql Serverに存在するかどうかを確認する方法は?

アプローチ1:INFORMATION_SCHEMAを使用します。テーブルビュー

現在のデータベースにCustomersテーブルが存在するかどうかを確認するために、以下のようなクエリを書くことができます。p>

IF EXISTS (SELECT * FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = N'Customers')BEGIN PRINT 'Table Exists'END

結果:
INFORMATION_SCHEMAビューを使用してテーブルの存在をチェック

上記のクエリは、現在のデータベース内のすべてのスキーマにわたってCustomersテーブル この代わりに、指定されたスキーマと指定されたデータベース内のテーブルの存在を確認したい場合は、上記のクエリを以下のように記述できます。

IF EXISTS (SELECT * FROM SqlHintsDemoDB.INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = N'dbo' AND TABLE_NAME = N'Customers')BEGIN PRINT 'Table Exists'END

RESULT:
INFORMATION_SCHEMAを使用してテーブルの存在を確認します。テーブルview1

このアプローチの長所: INFORMATION_SCHEMAビューは、異なるRDBMSシステム間で移植可能であるため、異なるRDBMSに移植しても変更は必要ありません。

ストアドプロシージャがSql Serverに存在するかどうかを確認する方法

アプローチ2:OBJECT_ID()関数を使用する

以下のようなOBJECT_ID()関数を使用して、現在のデータベースにCustomersテーブルが存在するかどうかを確認することができます。p>

IF OBJECT_ID(N'dbo.Customers', N'U') IS NOT NULLBEGIN PRINT 'Table Exists'END

結果:
OBJECT_ID()関数を使用してテーブルの存在をチェック

テーブル名のデータベース名とスキーマ名の部分を指定することはオプ ただし、データベース名とスキーマ名を指定すると、現在のデータベースをすべてのスキーマでチェックインするのではなく、指定したデータベースおよび指定したス 以下のクエリは、現在のデータベースがMASTERデータベースであっても、SqlHintsDemoDBデータベースのdboスキーマ内のCustomersテーブルの存在を確認できることを示しています。結果:
OBJECT_ID()Function1を使用してテーブルの存在を確認してください

長所:覚えやすい。 OBJECT_ID()関数について言及するもう一つの注目すべき点は、現在の接続コンテキストで作成された一時テーブルの存在をチェックするオプションを提供 他のすべての方法では、現在の接続コンテキストだけではなく、すべての接続コンテキストにわたって作成された一時テーブルの存在をチェッ 以下のクエリは、OBJECT_ID()関数を使用して一時テーブルの存在を確認する方法を示しています。

CREATE TABLE #TempTable(ID INT)GOIF OBJECT_ID(N'TempDB.dbo.#TempTable', N'U') IS NOT NULLBEGIN PRINT 'Table Exists'ENDGO

結果:
OBJECT_ID()Function1を使用して一時テーブルの存在を確認する

Sql Serverにデータベースが存在するかどうかを確認する方法

アプローチ3:sysを使用する。オブジェクトカタログビュー

私たちは、Sysを使用することができます。オブジェクトカタログビューは、以下に示すように、テーブルの存在を確認します。

IF EXISTS(SELECT 1 FROM sys.Objects WHERE Object_id = OBJECT_ID(N'dbo.Customers') AND Type = N'U')BEGIN PRINT 'Table Exists'END

結果
Sysを使用してテーブルの存在を確認します。オブジェクトビュー

レコードがテーブルに存在するかどうかを確認する方法

アプローチ4:sysを使用します。テーブルカタログビュー

私たちは、Sysを使用することができます。テーブルカタログビューは、以下に示すように、テーブルの存在を確認します。

IF EXISTS(SELECT 1 FROM sys.Tables WHERE Name = N'Customers' AND Type = N'U')BEGIN PRINT 'Table Exists'END

結果
Sysを使用してテーブルの存在を確認します。テーブルカタログビュー

Sys。テーブルカタログビューは、Sysから行を継承します。オブジェクトカタログビュー、Sys。オブジェクトカタログビューは、ベースビューと呼ばれ、sysと呼ばれます。テーブルは派生ビューと呼ばれます。 シスオ…テーブルはテーブルオブジェクトに対してのみ行を返しますが、Sys。オブジェクトビューテーブルオブジェクトの行を返すのとは別に、ストアドプロシージャ、ビューなどのオブジェクトの行を返します。ビューがSql Serverに存在するかどうかを確認する方法

アプローチ5:sysを使用しないでください。sysobjectsシステムテーブル

sysを使用しないようにしてください。sysobjectsシステムテーブルへの直接アクセスは、Sql Serverの将来のバージョンでは非推奨になります。 Microsoft BOLリンクによると、Microsoftはcatalog views sysを使用することを提案しています。オブジェクト/sys.sysの代わりにテーブル。sysobjectsシステムテーブルを直接。

IF EXISTS(SELECT name FROM sys.sysobjects WHERE Name = N'Customers' AND xtype = N'U')BEGIN PRINT 'Table Exists'END

結果:
Sysを使用してテーブルの存在を確認します。sysobjectsシステムテーブル

:
データベースが存在するかどうかを確認する方法
ストアドプロシージャがSql Serverに存在するかどうかを確認する方法
ビューが存在するかどうかを確認する方法
一時テーブルが存在するかどうかを確認する方法
レコードがテーブルに存在するかどうかを確認する方法

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です