I SQL Server kan du använda SCHEMA_NAME()
funktion för att returnera namnet på ett visst schema. Hur det fungerar är att det returnerar schemanamnet som är kopplat till ett schema-ID.
Om du inte skickar ett schema-ID till funktionen returnerar det namnet på standardschemat för den som ringer.
Exempel 1 – Return Default Schema
Här är ett exempel som returnerar namnet på standardschemat för den som ringer.
SELECT SCHEMA_NAME() AS Result;
Resultat:
+----------+ | Result | |----------| | dbo | +----------+
Detta returnerar namnet på standardschemat för den som ringer eftersom jag inte uttryckligen angav ett annat schema-ID.
Exempel 2 – Ange ett annat schema
I det här exemplet skickar jag ett schema-ID till funktionen.
SELECT SCHEMA_NAME(7) AS Result;
Resultat:
+----------+ | Result | |----------| | Fact | +----------+
Exempel 3 – Byta databas
Det föregående exemplet råkade bara köras i en databas som hade ett schema med ID 7. Om jag byter till en annan databas kan jag få ett annat schemanamn, eller inget namn alls.
Här är ett exempel på vad jag menar.
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)
Fyra kolumner returnerar NULL
på musikdatabasen, eftersom det inte finns något schema med det ID:t.
Exempel 4 – Mer läsbara frågeresultat
Här är ett exempel på hur du använder SCHEMA_NAME()
för att presentera schemanamnet istället för dess ID när resultat returneras från en systemvy.
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
systemvyn returnerar schema-ID men inte dess namn. Det är dock inget problem. ID:t är tillräckligt eftersom vi kan använda SCHEMA_NAME()
för att visa schemats namn, baserat på det ID:t.
Om vi inte hade SCHEMA_NAME()
funktion, skulle vi behöva göra en join på sys.schemas
systemvy bara för att få schemats namn.
Exempel 5 – I en WHERE-klausul
Här är ett exempel på hur du använder 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 | +--------+-------------+----------------+
Om du behöver få ett schemas ID, använd SCHEMA_ID()
fungera.