In SQL Server kunt u de SCHEMA_NAME()
. gebruiken functie om de naam van een bepaald schema te retourneren. De manier waarop het werkt, is dat het de schemanaam retourneert die is gekoppeld aan een schema-ID.
Als u geen schema-ID aan de functie doorgeeft, wordt de naam van het standaardschema van de aanroeper geretourneerd.
Voorbeeld 1 – Standaardschema retourneren
Hier is een voorbeeld dat de naam van het standaardschema van de beller retourneert.
SELECT SCHEMA_NAME() AS Result;
Resultaat:
+----------+ | Result | |----------| | dbo | +----------+
Dit retourneert de naam van het standaardschema van de beller omdat ik niet expliciet een ander schema-ID heb opgegeven.
Voorbeeld 2 – Specificeer een ander schema
In dit voorbeeld geef ik een schema-ID door aan de functie.
SELECT SCHEMA_NAME(7) AS Result;
Resultaat:
+----------+ | Result | |----------| | Fact | +----------+
Voorbeeld 3 – Van database wisselen
Het vorige voorbeeld werd toevallig uitgevoerd in een database met een schema met een ID van 7. Als ik overschakel naar een andere database, krijg ik mogelijk een andere schemanaam of helemaal geen naam.
Hier is een voorbeeld van wat ik bedoel.
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];
Resultaat:
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)
Vier kolommen retourneren NULL
in de muziekdatabase, omdat er geen schema is met die ID.
Voorbeeld 4 – Beter leesbare zoekopdrachtresultaten
Hier is een voorbeeld van het gebruik van SCHEMA_NAME()
om de schemanaam weer te geven in plaats van de ID bij het retourneren van resultaten uit een systeemweergave.
SELECT schema_id, SCHEMA_NAME(schema_id) AS [Schema Name], name AS [Table Name] FROM sys.tables;
Resultaat:
+-------------+---------------+-------------------------+ | 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 | +-------------+---------------+-------------------------+
De sys.tables
system view retourneert de schema-ID maar niet de naam. Dat is echter geen probleem. De ID is voldoende, omdat we SCHEMA_NAME()
. kunnen gebruiken om de naam van het schema weer te geven op basis van die ID.
Als we de SCHEMA_NAME()
. niet hadden functie, moeten we een join doen op de sys.schemas
systeemweergave om de naam van het schema te krijgen.
Voorbeeld 5 – In een WHERE-clausule
Hier is een voorbeeld van het gebruik van SCHEMA_NAME()
in een WHERE
clausule.
USE WideWorldImportersDW; SELECT * FROM sys.schemas WHERE name = SCHEMA_NAME(7);
Resultaat:
+--------+-------------+----------------+ | name | schema_id | principal_id | |--------+-------------+----------------| | Fact | 7 | 1 | +--------+-------------+----------------+
Als u de ID van een schema nodig heeft, gebruikt u de SCHEMA_ID()
functie.