В SQL Server можете да използвате SCHEMA_NAME()
функция за връщане на името на конкретна схема. Начинът, по който работи е, че връща името на схемата, свързано с идентификатор на схема.
Ако не предадете идентификатор на схемата на функцията, тя връща името на схемата по подразбиране на повикващия.
Пример 1 – Връщане на схема по подразбиране
Ето пример, който връща името на схемата по подразбиране на обаждащия се.
SELECT SCHEMA_NAME() AS Result;
Резултат:
+----------+ | Result | |----------| | dbo | +----------+
Това връща името на схемата по подразбиране на обаждащия се, защото не съм посочил изрично друг идентификатор на схема.
Пример 2 – Посочете различна схема
В този пример предавам идентификатор на схемата на функцията.
SELECT SCHEMA_NAME(7) AS Result;
Резултат:
+----------+ | Result | |----------| | Fact | +----------+
Пример 3 – Превключване на бази данни
Предишният пример току-що се изпълняваше в база данни, която имаше схема с идентификатор 7. Ако превключя към друга база данни, може да получа друго име на схема или изобщо да нямам име.
Ето пример за това, което имам предвид.
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];
Резултат:
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)
Четири колони връщат NULL
в базата данни Музика, защото няма схема с този идентификатор.
Пример 4 – По-четливи резултати от заявка
Ето пример за използване на SCHEMA_NAME()
за представяне на името на схемата вместо нейния идентификатор при връщане на резултати от системен изглед.
SELECT schema_id, SCHEMA_NAME(schema_id) AS [Schema Name], name AS [Table Name] FROM sys.tables;
Резултат:
+-------------+---------------+-------------------------+ | 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
системният изглед връща идентификатора на схемата, но не и нейното име. Това обаче не е проблем. Идентификационният номер е достатъчен, защото можем да използваме SCHEMA_NAME()
за да се покаже името на схемата въз основа на този идентификатор.
Ако нямахме SCHEMA_NAME()
функция, ще трябва да направим присъединяване на sys.schemas
системен изглед само за да получите името на схемата.
Пример 5 – В клауза WHERE
Ето пример за използване на SCHEMA_NAME()
в WHERE
клауза.
USE WideWorldImportersDW; SELECT * FROM sys.schemas WHERE name = SCHEMA_NAME(7);
Резултат:
+--------+-------------+----------------+ | name | schema_id | principal_id | |--------+-------------+----------------| | Fact | 7 | 1 | +--------+-------------+----------------+
Ако трябва да получите ID на схема, използвайте SCHEMA_ID()
функция.