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

SQL ServerでのSCHEMA_NAME()のしくみ

    SQL Serverでは、SCHEMA_NAME()を使用できます 特定のスキーマの名前を返す関数。それが機能する方法は、スキーマIDに関連付けられたスキーマ名を返すことです。

    関数にスキーマIDを渡さない場合、呼び出し元のデフォルトスキーマの名前が返されます。

    例1-デフォルトのスキーマを返す

    呼び出し元のデフォルトスキーマの名前を返す例を次に示します。

    SELECT SCHEMA_NAME() AS Result;
    

    結果:

    +----------+
    | Result   |
    |----------|
    | dbo      |
    +----------+
    

    別のスキーマIDを明示的に指定しなかったため、これにより呼び出し元のデフォルトスキーマの名前が返されます。

    例2–別のスキーマを指定する

    この例では、スキーマIDを関数に渡します。

    SELECT SCHEMA_NAME(7) AS Result;
    

    結果:

    +----------+
    | Result   |
    |----------|
    | Fact     |
    +----------+
    

    例3–データベースの切り替え

    前の例は、たまたまIDが7のスキーマを持つデータベースで実行されました。別のデータベースに切り替えると、別のスキーマ名が表示されるか、名前がまったく表示されない可能性があります。

    これが私の言いたいことの例です。

    USE WideWorldImportersDW;
    SELECT 
      SCHEMA_NAME(1) AS [1],
      SCHEMA_NAME(2) AS [2],
      SCHEMA_NAME(3) AS [3],
      SCHEMA_NAME(4) AS [4],
      SCHEMA_NAME(5) AS [5],
      SCHEMA_NAME(6) AS [6],
      SCHEMA_NAME(7) AS [7],
      SCHEMA_NAME(8) AS [8];
    
    USE Music;
    SELECT 
      SCHEMA_NAME(1) AS [1],
      SCHEMA_NAME(2) AS [2],
      SCHEMA_NAME(3) AS [3],
      SCHEMA_NAME(4) AS [4],
      SCHEMA_NAME(5) AS [5],
      SCHEMA_NAME(6) AS [6],
      SCHEMA_NAME(7) AS [7],
      SCHEMA_NAME(8) AS [8]; 
    

    結果:

    Changed database context to 'WideWorldImportersDW'.
    +-----+-------+--------------------+-----+-------------+-----------+------+-------------+
    | 1   | 2     | 3                  | 4   | 5           | 6         | 7    | 8           |
    |-----+-------+--------------------+-----+-------------+-----------+------+-------------|
    | dbo | guest | INFORMATION_SCHEMA | sys | Application | Dimension | Fact | Integration |
    +-----+-------+--------------------+-----+-------------+-----------+------+-------------+
    (1 row affected)
    Changed database context to 'Music'.
    +-----+-------+--------------------+-----+------+------+------+------+
    | 1   | 2     | 3                  | 4   | 5    | 6    | 7    | 8    |
    |-----+-------+--------------------+-----+------+------+------+------|
    | dbo | guest | INFORMATION_SCHEMA | sys | NULL | NULL | NULL | NULL |
    +-----+-------+--------------------+-----+------+------+------+------+
    (1 row affected)
    

    4つの列はNULLを返します そのIDのスキーマがないため、音楽データベースにあります。

    例4–より読みやすいクエリ結果

    SCHEMA_NAME()の使用例を次に示します。 システムビューから結果を返すときに、IDの代わりにスキーマ名を表示します。

    SELECT 
      schema_id,
      SCHEMA_NAME(schema_id) AS [Schema Name],
      name AS [Table Name]
    FROM sys.tables;
    

    結果:

    +-------------+---------------+-------------------------+
    | schema_id   | Schema Name   | Table Name              |
    |-------------+---------------+-------------------------|
    | 8           | Integration   | ETL Cutoff              |
    | 8           | Integration   | Lineage                 |
    | 8           | Integration   | Customer_Staging        |
    | 8           | Integration   | Employee_Staging        |
    | 8           | Integration   | Movement_Staging        |
    | 8           | Integration   | Order_Staging           |
    | 8           | Integration   | PaymentMethod_Staging   |
    | 6           | Dimension     | City                    |
    | 8           | Integration   | Purchase_Staging        |
    | 6           | Dimension     | Customer                |
    | 8           | Integration   | Sale_Staging            |
    | 8           | Integration   | StockHolding_Staging    |
    | 6           | Dimension     | Date                    |
    | 8           | Integration   | StockItem_Staging       |
    | 6           | Dimension     | Employee                |
    | 8           | Integration   | Supplier_Staging        |
    | 6           | Dimension     | Payment Method          |
    | 8           | Integration   | Transaction_Staging     |
    | 8           | Integration   | TransactionType_Staging |
    | 6           | Dimension     | Stock Item              |
    | 6           | Dimension     | Supplier                |
    | 6           | Dimension     | Transaction Type        |
    | 7           | Fact          | Movement                |
    | 7           | Fact          | Order                   |
    | 7           | Fact          | Purchase                |
    | 7           | Fact          | Sale                    |
    | 7           | Fact          | Stock Holding           |
    | 7           | Fact          | Transaction             |
    | 8           | Integration   | City_Staging            |
    +-------------+---------------+-------------------------+
    

    sys.tables システムビューはスキーマIDを返しますが、名前は返しません。しかし、それは問題ではありません。 SCHEMA_NAME()を使用できるため、IDで十分です。 そのIDに基づいてスキーマの名前を表示します。

    SCHEMA_NAME()がなかった場合 関数の場合、sys.schemasで結合を行う必要があります スキーマ名を取得するためのシステムビュー。

    例5–WHERE句内

    SCHEMA_NAME()の使用例を次に示します。 WHERE 条項。

    USE WideWorldImportersDW;
    SELECT * FROM sys.schemas
    WHERE name = SCHEMA_NAME(7);
    

    結果:

    +--------+-------------+----------------+
    | name   | schema_id   | principal_id   |
    |--------+-------------+----------------|
    | Fact   | 7           | 1              |
    +--------+-------------+----------------+
    

    スキーマのIDを取得する必要がある場合は、SCHEMA_ID()を使用してください 働き。


    1. newid()による注文-どのように機能しますか?

    2. テーブルの外部キー関係を照会する

    3. MariaDBの時間値から秒の部分を返す4つの関数

    4. SQLServerのデフォルトの制約とは-SQLServer/TSQLチュートリアルパート90