sql >> データベース >  >> RDS >> Sqlserver

SQL ServerのクロスデータベースオブジェクトでOBJECT_ID()を使用する方法

    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というスキーマスコープのオブジェクトがある場合 そうすれば、別の結果が得られる可能性があります。このような場合、実際には正しくないのに、結果が正しいと誤解しがちです。


    1. 列のデータ型をシリアルに変更

    2. Mtop(MySQL Database Server Monitoring)をRHEL / CentOS 6/5/4、Fedora17-12にインストールします

    3. クラスでのPDOの使用

    4. ORA-00903:PreparedStatementのテーブル名が無効です