OBJECT_ID()
の1つの違い およびOBJECT_NAME()
SQL Serverでは、データベース間クエリに使用される構文です。つまり、別のデータベースのオブジェクトで使用されている場合です。
OBJECT_NAME()
関数には、指定できるオプションの引数があります。これは、名前を取得しようとしているオブジェクトを含むデータベースのデータベースIDを指定します。この引数を指定すると、別のデータベースにあるオブジェクトの名前を取得できます。
OBJECT_ID()
一方、関数はそのような引数を必要としません。代わりに、この関数を使用すると、3つの部分からなる名前を使用して、IDを取得しようとしているオブジェクトのデータベース、スキーマ、および名前を指定できます。
この記事には、OBJECT_ID()
の使用例が含まれています 別のデータベースからオブジェクトの名前を取得します。
例1-基本的なクエリ
これがどのように機能するかを示す基本的な例です。
USE WideWorldImportersDW; SELECT OBJECT_ID('Music.dbo.Artists') AS Result;
結果:
+-----------+ | Result | |-----------| | 885578193 | +-----------+
ここでは、WideWorldImportersDW
に切り替えました データベース、次にMusic
上のオブジェクトの名前を照会しました データベース。
例2–現在のデータベースとの比較
既定では、SQL Serverは、オブジェクト名が現在のデータベースのコンテキストにあると想定します。したがって、3つの部分からなる名前を使用して別のデータベースのオブジェクトを指定しない場合、SQLServerデータベースエンジンは現在のデータベースのみを検索します。
これは前の例と同じコードですが、今回は1つのパーツ名と2つのパーツ名を含めています。また、コードを2回実行します。1回目は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
にあると想定されます。 (間違った)データベース。
両方のデータベースにArtists
というスキーマスコープのオブジェクトがある場合 そうすれば、別の結果が得られる可能性があります。このような場合、実際には正しくないのに、結果が正しいと誤解しがちです。