SQL Serverでは、SCHEMA_ID()
を使用できます 指定されたスキーマのIDを返す関数。具体的には、この関数はスキーマ名に関連付けられたスキーマIDを返します。
SCHEMA_NAME()
のようなものです ただし、名前の代わりにスキーマのIDを返します(IDの代わりにnameパラメーターを受け入れます)。
関数にスキーマ名を渡さない場合は、呼び出し元のデフォルトスキーマのIDが返されます。
例1-デフォルトのスキーマを返す
発信者のデフォルトスキーマのIDを返す例を次に示します。
SELECT SCHEMA_ID() AS Result;
結果:
+----------+ | Result | |----------| | 1 | +----------+
他のスキーマ名を明示的に指定しなかったため、これにより呼び出し元のデフォルトスキーマのIDが返されます。
スキーマ名とともにここにあります。
SELECT SCHEMA_ID() AS [Schema ID], SCHEMA_NAME() AS [Schema Name];
結果:
+-------------+---------------+ | Schema ID | Schema Name | |-------------+---------------| | 1 | dbo | +-------------+---------------+
例2–別のスキーマを指定する
この例では、スキーマ名を関数に明示的に渡します。
SELECT SCHEMA_ID('Dimension') AS Result;
結果:
+----------+ | Result | |----------| | 6 | +----------+
これは、DimensionというスキーマのIDが6であることを示しています。
例3–データベースの切り替え
前の例は、Dimensionというスキーマを持つデータベースで実行されたばかりです。別のデータベースに切り替えると、別のスキーマIDを取得するか、IDをまったく取得しない可能性があります。
これが私の言いたいことの例です。
USE WideWorldImportersDW; SELECT SCHEMA_ID('Dimension') AS Result; USE Music; SELECT SCHEMA_ID('Dimension') AS Result;
結果:
Changed database context to 'WideWorldImportersDW'. +----------+ | Result | |----------| | 6 | +----------+ (1 row affected) Changed database context to 'Music'. +----------+ | Result | |----------| | NULL | +----------+ (1 row affected)
2番目の結果はNULL
を返します MusicデータベースにDimensionというスキーマがないためです。
例4–WHERE句内
SCHEMA_ID()
の使用 WHERE
句は、スキーマで結果をフィルタリングするための便利な方法です。
SQL Serverでは、さまざまなシステムビューがschema_id
を使用します スキーマIDを格納する列ですが、スキーマ名は格納しません。したがって、結果をスキーマでフィルタリングする場合は、スキーマIDを知っている必要があります。ここでSCHEMA_ID()
非常に便利です。 sys.schemas
で参加する必要がなくなります。 スキーマ名を計算するためだけに表示します。
SCHEMA_ID()
の使用例を次に示します。 WHERE
条項。
USE WideWorldImportersDW; SELECT name, type_desc FROM sys.objects WHERE schema_id = SCHEMA_ID('Dimension');
結果:
Changed database context to 'WideWorldImportersDW'. +----------------------------------------------------+------------------------+ | name | type_desc | |----------------------------------------------------+------------------------| | City | USER_TABLE | | PK_Dimension_City | PRIMARY_KEY_CONSTRAINT | | DF_Dimension_City_City_Key | DEFAULT_CONSTRAINT | | Customer | USER_TABLE | | PK_Dimension_Customer | PRIMARY_KEY_CONSTRAINT | | DF_Dimension_Customer_Customer_Key | DEFAULT_CONSTRAINT | | Date | USER_TABLE | | PK_Dimension_Date | PRIMARY_KEY_CONSTRAINT | | Employee | USER_TABLE | | PK_Dimension_Employee | PRIMARY_KEY_CONSTRAINT | | DF_Dimension_Employee_Employee_Key | DEFAULT_CONSTRAINT | | Payment Method | USER_TABLE | | PK_Dimension_Payment_Method | PRIMARY_KEY_CONSTRAINT | | DF_Dimension_Payment_Method_Payment_Method_Key | DEFAULT_CONSTRAINT | | Stock Item | USER_TABLE | | PK_Dimension_Stock_Item | PRIMARY_KEY_CONSTRAINT | | DF_Dimension_Stock_Item_Stock_Item_Key | DEFAULT_CONSTRAINT | | Supplier | USER_TABLE | | PK_Dimension_Supplier | PRIMARY_KEY_CONSTRAINT | | DF_Dimension_Supplier_Supplier_Key | DEFAULT_CONSTRAINT | | Transaction Type | USER_TABLE | | PK_Dimension_Transaction_Type | PRIMARY_KEY_CONSTRAINT | | DF_Dimension_Transaction_Type_Transaction_Type_Key | DEFAULT_CONSTRAINT | +----------------------------------------------------+------------------------+ (23 rows affected)