sql >> Databáze >  >> RDS >> Sqlserver

Jak funguje SCHEMA_ID() v SQL Server

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)

  1. Vrátit seznam funkcí oddílů v SQL Server (T-SQL)

  2. Různé způsoby monitorování skupin dostupnosti serveru SQL Server AlwaysOn

  3. Může být cizí klíč NULL a/nebo duplicitní?

  4. Co je SQLite?