SQL Serverでは、OBJECT_ID()
を使用できます 名前に基づいてオブジェクトのIDを返す関数。
これは、オブジェクトのIDが必要であるが、その名前しかわからない場合に役立ちます。
OBJECT_ID()
の公式定義 スキーマスコープのオブジェクトのデータベースオブジェクト識別番号を返す
ということです。 。
例1-基本的な使用法
これがどのように機能するかを示す基本的な例です。
SELECT OBJECT_ID('Artists') AS Result;
結果:
+-----------+ | Result | |-----------| | 885578193 | +-----------+
この場合、現在のデータベースにはAlbums
というオブジェクトが含まれています。 、およびそのIDは885578193です。これはobject_id
にあるIDです。 sys.objects
の列 システムカタログビュー。
例2–sys.objectsビューを確認する
これが私が今言ったことを確認するためのもう1つの基本的な例です。
SELECT name, object_id, OBJECT_ID(name) AS [OBJECT_ID(name)] FROM sys.objects WHERE name = 'Artists';
結果:
+---------+-------------+-------------------+ | name | object_id | OBJECT_ID(name) | |---------+-------------+-------------------| | Artists | 885578193 | 885578193 | +---------+-------------+-------------------+>
sys.objects
システムカタログビューには、データベース内に作成されたユーザー定義のスキーマスコープオブジェクトごとの行が含まれています。
この例では、最初の2列にオブジェクトのname
が表示されています およびobject_id
それぞれ。
この例の3番目の列では、OBJECT_ID()
を使用しています。 名前に基づいてオブジェクトのIDを返します。これを行うには、名前列をOBJECT_ID()
に渡します。 機能。
これは明らかに単なる例であり、OBJECT_ID()
を使用しています sys.objects
であるため、この場合は不要でした。 すでにオブジェクトのIDを返します。
例3–より便利な例
この例では、OBJECT_ID()
を使用します WHERE
Client
というテーブルに関連する結果のみを取得するように句を指定します 。
SELECT OBJECT_NAME(referencing_id) AS [Referencing Entity], OBJECT_NAME(referencing_minor_id) AS [Referencing Minor Entity], referencing_class_desc AS [Class], COL_NAME(referenced_id, referenced_minor_id) AS [Column] FROM sys.sql_expression_dependencies WHERE referenced_id = OBJECT_ID('Client');
結果:
+----------------------+----------------------------+------------------+------------+ | Referencing Entity | Referencing Minor Entity | Class | Column | |----------------------+----------------------------+------------------+------------| | uspGetClient | NULL | OBJECT_OR_COLUMN | NULL | | uspGetOrdersByClient | NULL | OBJECT_OR_COLUMN | NULL | | chkClientCode | NULL | OBJECT_OR_COLUMN | ClientCode | +----------------------+----------------------------+------------------+------------+
この場合、どのエンティティがClient
に依存しているかを確認したいと思いました。 テーブル(つまり、SQLコードでそのテーブルを参照するエンティティ)。 referenced_id
列はオブジェクトのIDを使用するため、OBJECT_ID()
を使用します 、Client
のIDを取得できました テーブルを作成し、referenced_id
と比較します 。
このクエリの詳細な説明と関連する例については、SQL Serverでの依存関係の検索:sql_expression_dependenciesを参照してください。
例4–完全修飾名
オブジェクト名をスキーマ名で修飾するオプションもあり、必要に応じてデータベース名も修飾することもできます。
簡単な例を次に示します。
SELECT OBJECT_ID('Artists') AS [1 Part Name], OBJECT_ID('dbo.Artists') AS [2 Part Name], OBJECT_ID('Music.dbo.Artists') AS [3 Part Name];
結果:
+---------------+---------------+---------------+ | 1 Part Name | 2 Part Name | 3 Part Name | |---------------+---------------+---------------| | 885578193 | 885578193 | 885578193 | +---------------+---------------+---------------+
ここでも、今回は区切り文字として角かっこを使用しています:
SELECT OBJECT_ID('[Artists]') AS [1 Part Name], OBJECT_ID('[dbo].[Artists]') AS [2 Part Name], OBJECT_ID('[Music].[dbo].[Artists]') AS [3 Part Name];
結果:
+---------------+---------------+---------------+ | 1 Part Name | 2 Part Name | 3 Part Name | |---------------+---------------+---------------| | 885578193 | 885578193 | 885578193 | +---------------+---------------+---------------+
同じ結果。
オブジェクトが存在することがわかっていてもNULLの結果が得られる場合は、そのオブジェクトをスキーマ(およびデータベース名)で修飾してみてください。
例5–データベース間のクエリ
既定では、SQL Serverは、オブジェクト名が現在のデータベースのコンテキストにあると想定します。 3つの部分からなる名前を使用して、別のデータベース内のオブジェクトを指定できます。
これは前の例と同じコードですが、今回はコードを2回実行します。最初は、Music
で実行します。 データベース、WideWorldImportersDW
で2回目に実行 データベース:
USE Music; SELECT OBJECT_ID('Artists') AS [1 Part Name], OBJECT_ID('dbo.Artists') AS [2 Part Name], OBJECT_ID('Music.dbo.Artists') AS [3 Part Name]; USE WideWorldImportersDW; SELECT OBJECT_ID('Artists') AS [1 Part Name], OBJECT_ID('dbo.Artists') AS [2 Part Name], OBJECT_ID('Music.dbo.Artists') AS [3 Part Name];
結果:
Changed database context to 'Music'. +---------------+---------------+---------------+ | 1 Part Name | 2 Part Name | 3 Part Name | |---------------+---------------+---------------| | 885578193 | 885578193 | 885578193 | +---------------+---------------+---------------+ (1 row affected) Changed database context to 'WideWorldImportersDW'. +---------------+---------------+---------------+ | 1 Part Name | 2 Part Name | 3 Part Name | |---------------+---------------+---------------| | NULL | NULL | 885578193 | +---------------+---------------+---------------+ (1 row affected)
最初の結果では、3つの列すべてが正しいIDを返します。これは、オブジェクトがたまたまMusic
にあるためです。 データベース。
2番目の結果では、3つのパーツ名のみが正しいオブジェクトを見つけることができます。 1つの部分と2つの部分の名前はデータベースの名前を指定しないため、これは予想されることです。したがって、オブジェクトはWideWorldImportersDW
にあると想定されます。 (間違った)データベース。
例6–オブジェクトタイプを指定する
OBJECT_ID()
関数は、オブジェクトタイプの引数も受け入れます。この引数は、提供されている場合、オブジェクトの名前の後にあります。
例:
SELECT OBJECT_ID('Artists', 'U') AS [Table];
結果:
+-----------+ | Table | |-----------| | 885578193 | +-----------+
ここでは、オブジェクトタイプがU
であることを指定します 、これは「テーブル(ユーザー定義)」を意味します。
別のオブジェクトタイプを指定しようとすると、NULL
が返されます :
SELECT OBJECT_ID('Artists', 'U') AS [Table], OBJECT_ID('Artists', 'V') AS [View], OBJECT_ID('Artists', 'P') AS [Stored Procedure];
結果:
+-----------+--------+--------------------+ | Table | View | Stored Procedure | |-----------+--------+--------------------| | 885578193 | NULL | NULL | +-----------+--------+--------------------+
ここでも同じですが、代わりにビューの名前が付いています:
SELECT OBJECT_ID('RockAlbums', 'U') AS [Table], OBJECT_ID('RockAlbums', 'V') AS [View], OBJECT_ID('RockAlbums', 'P') AS [Stored Procedure];
結果:
+---------+------------+--------------------+ | Table | View | Stored Procedure | |---------+------------+--------------------| | NULL | 1525580473 | NULL | +---------+------------+--------------------+>