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()
を使用してください 働き。