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

Jak funguje SCHEMA_NAME() na serveru SQL

V SQL Server můžete použít SCHEMA_NAME() funkce, která vrátí název konkrétního schématu. Funguje to tak, že vrací název schématu spojený s ID schématu.

Pokud funkci nepředáte ID schématu, vrátí název výchozího schématu volajícího.

Příklad 1 – Návrat výchozího schématu

Zde je příklad, který vrací název výchozího schématu volajícího.

SELECT SCHEMA_NAME() AS Result;

Výsledek:

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

Toto vrátí název výchozího schématu volajícího, protože jsem explicitně neuvedl jiné ID schématu.

Příklad 2 – Určení jiného schématu

V tomto příkladu předám funkci ID schématu.

SELECT SCHEMA_NAME(7) AS Result;

Výsledek:

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

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 s ID 7. Pokud přepnu na jinou databázi, může se mi zobrazit jiný název schématu nebo žádný název.

Zde je příklad toho, co mám na mysli.

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]; 

Výsledek:

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)

Čtyři sloupce vrátí NULL v hudební databázi, protože neexistuje žádné schéma s tímto ID.

Příklad 4 – Čitelnější výsledky dotazu

Zde je příklad použití SCHEMA_NAME() k uvedení názvu schématu místo jeho ID při vracení výsledků ze systémového pohledu.

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

Výsledek:

+-------------+---------------+-------------------------+
| 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            |
+-------------+---------------+-------------------------+

Soubor sys.tables systémový pohled vrátí ID schématu, ale ne jeho název. To však není problém. ID je dostatečné, protože můžeme použít SCHEMA_NAME() zobrazíte název schématu na základě tohoto ID.

Pokud bychom neměli SCHEMA_NAME() museli bychom provést spojení na sys.schemas systémové zobrazení, jen abyste získali název schématu.

Příklad 5 – V klauzuli WHERE

Zde je příklad použití SCHEMA_NAME() v WHERE doložka.

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

Výsledek:

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

Pokud potřebujete získat ID schématu, použijte SCHEMA_ID() funkce.


  1. Správa dalšího PostgreSQL Commitfestu

  2. Jak implementovat dávkové načítání pomocí Fluent NHibernate při práci s Oracle?

  3. Použití agregačních funkcí (SUM, AVG, MAX, MIN, COUNT, DISTINCT) v MySQL

  4. Jak dělat modelování dědičnosti v relačních databázích?