V SQL Server můžete použít SCHEMA_ID()
funkce, která vrátí ID daného schématu. Přesněji řečeno, tato funkce vrací ID schématu spojené s názvem schématu.
Je to jako SCHEMA_NAME()
kromě toho, že místo názvu vrátí ID schématu (a místo ID přijme parametr name).
Pokud funkci nepředáte název schématu, vrátí ID výchozího schématu volajícího.
Příklad 1 – Návrat výchozího schématu
Zde je příklad, který vrací ID výchozího schématu volajícího.
SELECT SCHEMA_ID() AS Result;
Výsledek:
+----------+ | Result | |----------| | 1 | +----------+
Vrátí ID výchozího schématu volajícího, protože jsem výslovně neuvedl žádný jiný název schématu.
Tady je to znovu spolu s názvem schématu.
SELECT SCHEMA_ID() AS [Schema ID], SCHEMA_NAME() AS [Schema Name];
Výsledek:
+-------------+---------------+ | Schema ID | Schema Name | |-------------+---------------| | 1 | dbo | +-------------+---------------+
Příklad 2 – Určení jiného schématu
V tomto příkladu funkci explicitně předám název schématu.
SELECT SCHEMA_ID('Dimension') AS Result;
Výsledek:
+----------+ | Result | |----------| | 6 | +----------+
To mi říká, že schéma s názvem Dimension má ID 6.
Příklad 3 – Přepínání databází
Předchozí příklad byl náhodou spuštěn v databázi, která měla schéma nazvané Dimension. Pokud přepnu na jinou databázi, může se stát, že dostanu jiné ID schématu nebo žádné ID.
Zde je příklad toho, co mám na mysli.
USE WideWorldImportersDW; SELECT SCHEMA_ID('Dimension') AS Result; USE Music; SELECT SCHEMA_ID('Dimension') AS Result;
Výsledek:
Changed database context to 'WideWorldImportersDW'. +----------+ | Result | |----------| | 6 | +----------+ (1 row affected) Changed database context to 'Music'. +----------+ | Result | |----------| | NULL | +----------+ (1 row affected)
Druhý výsledek vrátí NULL
protože v hudební databázi není žádné schéma s názvem Dimension.
Příklad 4 – V klauzuli WHERE
Pomocí SCHEMA_ID()
v WHERE
klauzule může být užitečným způsobem, jak filtrovat výsledky podle schématu.
Na serveru SQL Server používají různá zobrazení systému schema_id
sloupec pro uložení ID schématu, ale nikoli názvu schématu. Pokud tedy budete filtrovat výsledky podle schématu, musíte znát ID schématu. To je místo SCHEMA_ID()
může být velmi užitečné. Ušetří vám to nutnost připojovat se k sys.schemas
zobrazit pouze za účelem zjištění názvu schématu.
Zde je příklad použití SCHEMA_ID()
v WHERE
doložka.
USE WideWorldImportersDW; SELECT name, type_desc FROM sys.objects WHERE schema_id = SCHEMA_ID('Dimension');
Výsledek:
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)