I SQL Server kan du bruge SCHEMA_NAME()
funktion for at returnere navnet på et bestemt skema. Den måde, det fungerer på, er, at det returnerer skemanavnet forbundet med et skema-id.
Hvis du ikke sender et skema-id til funktionen, returnerer det navnet på standardskemaet for den, der ringer.
Eksempel 1 – Returner standardskema
Her er et eksempel, der returnerer navnet på standardskemaet for den, der ringer.
SELECT SCHEMA_NAME() AS Result;
Resultat:
+----------+ | Result | |----------| | dbo | +----------+
Dette returnerer navnet på standardskemaet for den, der ringer, fordi jeg ikke eksplicit har angivet et andet skema-id.
Eksempel 2 – Angiv et andet skema
I dette eksempel sender jeg et skema-id til funktionen.
SELECT SCHEMA_NAME(7) AS Result;
Resultat:
+----------+ | Result | |----------| | Fact | +----------+
Eksempel 3 – Skift database
Det forrige eksempel blev tilfældigvis kørt i en database, der havde et skema med et ID på 7. Hvis jeg skifter til en anden database, får jeg muligvis et andet skemanavn, eller slet ikke noget navn.
Her er et eksempel på, hvad jeg mener.
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];
Resultat:
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)
Fire kolonner returnerer NULL
på musikdatabasen, fordi der ikke er noget skema med det id.
Eksempel 4 – Mere læsbare forespørgselsresultater
Her er et eksempel på brug af SCHEMA_NAME()
at præsentere skemanavnet i stedet for dets ID, når resultater returneres fra en systemvisning.
SELECT schema_id, SCHEMA_NAME(schema_id) AS [Schema Name], name AS [Table Name] FROM sys.tables;
Resultat:
+-------------+---------------+-------------------------+ | 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
systemvisning returnerer skema-id'et, men ikke dets navn. Det er dog ikke et problem. ID'et er tilstrækkeligt, fordi vi kan bruge SCHEMA_NAME()
for at vise skemaets navn baseret på dette id.
Hvis vi ikke havde SCHEMA_NAME()
funktion, skal vi lave en join på sys.schemas
systemvisning bare for at få skemaets navn.
Eksempel 5 – I en WHERE-klausul
Her er et eksempel på brug af SCHEMA_NAME()
i en WHERE
klausul.
USE WideWorldImportersDW; SELECT * FROM sys.schemas WHERE name = SCHEMA_NAME(7);
Resultat:
+--------+-------------+----------------+ | name | schema_id | principal_id | |--------+-------------+----------------| | Fact | 7 | 1 | +--------+-------------+----------------+
Hvis du har brug for at få et skemas ID, skal du bruge SCHEMA_ID()
fungere.