SQL Serverでは、OBJECTPROPERTY()を使用できます オブジェクトのタイプをチェックする関数。具体的には、特定のタイプかどうかを確認できます。
たとえば、IsTable プロパティは、それがテーブルであるかどうか、IsViewを示します。 プロパティは、それがビューなどであるかどうかを示します。
この記事では、オブジェクトがテーブル、ビュー、ストアドプロシージャ、またはテーブル値関数であるかどうかを確認するいくつかの基本的な例を示します。
例1-テーブルを確認する
オブジェクトがテーブルであるかどうかを確認する例を次に示します。
USE Music; SELECT OBJECTPROPERTY(OBJECT_ID(N'dbo.Artists'), 'IsTable') AS [IsTable];
結果:
+-----------+ | IsTable | |-----------| | 1 | +-----------+
ここで、オブジェクト名はArtistsです。 スキーマはdboです 。
この場合、結果は1になります。 、これは、オブジェクトが実際にテーブルであることを示します。
例2–ビューを確認する
オブジェクトがビューであるかどうかを確認する例を次に示します。
USE Music; SELECT OBJECTPROPERTY(OBJECT_ID(N'dbo.Artists'), 'IsView') AS [IsView];
結果:
+----------+ | IsView | |----------| | 0 | +----------+
この場合、前の例と同じオブジェクトをチェックしているので、ビューではないことがすでにわかっています。したがって、結果は0になります。 、これはビューではないことを示します。
別の例を次に示します。今回は、オブジェクトは実際にはビューです。
SELECT OBJECTPROPERTY(OBJECT_ID(N'dbo.RockAlbums'), 'IsView') AS [IsView];
結果:
+----------+ | IsView | |----------| | 1 | +----------+
USE Music;を削除したことに注意してください 一部、私はすでにそのデータベースにいるからです。 OBJECTPROPERTY() 現在のデータベース内のスキーマスコープのオブジェクトのみをチェックします。
例3–条件文
概念をさらに一歩進めて、前の例をIFに組み込むことができます。 声明。そうすれば、単一のステートメントを実行して、オブジェクトのタイプを見つけることができます。
以下は、オブジェクトタイプを出力するだけの基本的な例です。
表
DECLARE @TheObject varchar(255) = 'dbo.Artists'; IF (SELECT OBJECTPROPERTY(OBJECT_ID(@TheObject), 'IsView') AS [IsView]) = 1 PRINT 'View'; ELSE IF (SELECT OBJECTPROPERTY(OBJECT_ID(@TheObject), 'IsTable') AS [IsTable]) = 1 PRINT 'Table'; ELSE IF (SELECT OBJECTPROPERTY(OBJECT_ID(@TheObject), 'IsProcedure') AS [IsProcedure]) = 1 PRINT 'Stored Procedure'; ELSE IF (SELECT OBJECTPROPERTY(OBJECT_ID(@TheObject), 'IsTableFunction') AS [IsTableFunction]) = 1 PRINT 'Table-valued Function'; ELSE PRINT 'Unknown. Maybe add more types to this statement.';
結果:
Table
この場合、オブジェクトはテーブルです。
同じステートメントを使用しているが、オブジェクトタイプが異なるその他の例を次に示します。
表示
DECLARE @TheObject varchar(255) = 'dbo.RockAlbums'; IF (SELECT OBJECTPROPERTY(OBJECT_ID(@TheObject), 'IsView') AS [IsView]) = 1 PRINT 'View'; ELSE IF (SELECT OBJECTPROPERTY(OBJECT_ID(@TheObject), 'IsTable') AS [IsTable]) = 1 PRINT 'Table'; ELSE IF (SELECT OBJECTPROPERTY(OBJECT_ID(@TheObject), 'IsProcedure') AS [IsProcedure]) = 1 PRINT 'Stored Procedure'; ELSE IF (SELECT OBJECTPROPERTY(OBJECT_ID(@TheObject), 'IsTableFunction') AS [IsTableFunction]) = 1 PRINT 'Table-valued Function'; ELSE PRINT 'Unknown. Maybe add more types to this statement.';
結果:
View
ストアドプロシージャ
DECLARE @TheObject varchar(255) = 'dbo.uspGetAlbumsByArtist'; IF (SELECT OBJECTPROPERTY(OBJECT_ID(@TheObject), 'IsView') AS [IsView]) = 1 PRINT 'View'; ELSE IF (SELECT OBJECTPROPERTY(OBJECT_ID(@TheObject), 'IsTable') AS [IsTable]) = 1 PRINT 'Table'; ELSE IF (SELECT OBJECTPROPERTY(OBJECT_ID(@TheObject), 'IsProcedure') AS [IsProcedure]) = 1 PRINT 'Stored Procedure'; ELSE IF (SELECT OBJECTPROPERTY(OBJECT_ID(@TheObject), 'IsTableFunction') AS [IsTableFunction]) = 1 PRINT 'Table-valued Function'; ELSE PRINT 'Unknown. Maybe add more types to this statement.';
結果:
Stored Procedure
テーブル値関数
DECLARE @TheObject varchar(255) = 'dbo.ufn_AlbumsByGenre1'; IF (SELECT OBJECTPROPERTY(OBJECT_ID(@TheObject), 'IsView') AS [IsView]) = 1 PRINT 'View'; ELSE IF (SELECT OBJECTPROPERTY(OBJECT_ID(@TheObject), 'IsTable') AS [IsTable]) = 1 PRINT 'Table'; ELSE IF (SELECT OBJECTPROPERTY(OBJECT_ID(@TheObject), 'IsProcedure') AS [IsProcedure]) = 1 PRINT 'Stored Procedure'; ELSE IF (SELECT OBJECTPROPERTY(OBJECT_ID(@TheObject), 'IsTableFunction') AS [IsTableFunction]) = 1 PRINT 'Table-valued Function'; ELSE PRINT 'Unknown. Maybe add more types to this statement.';
結果:
Table-valued Function
ステートメントにタイプを追加して、ステートメントをより便利にすることができます。 OBJECTPROPERTY()の引数をリストしました このページで受け入れます。ただし、これらすべてがオブジェクトタイプであるとは限りません。確認できるさまざまなプロパティがあります。
各プロパティの完全な説明については、Microsoftのドキュメントを参照してください。