W SQL Server możesz użyć SCHEMA_NAME()
funkcja zwracająca nazwę konkretnego schematu. Działa to tak, że zwraca nazwę schematu powiązaną z identyfikatorem schematu.
Jeśli nie przekażesz identyfikatora schematu do funkcji, zwróci ona nazwę domyślnego schematu wywołującego.
Przykład 1 – Zwróć domyślny schemat
Oto przykład, który zwraca nazwę domyślnego schematu wywołującego.
SELECT SCHEMA_NAME() AS Result;
Wynik:
+----------+ | Result | |----------| | dbo | +----------+
Zwraca to nazwę domyślnego schematu wywołującego, ponieważ nie określiłem wyraźnie innego identyfikatora schematu.
Przykład 2 – Określ inny schemat
W tym przykładzie przekazuję identyfikator schematu do funkcji.
SELECT SCHEMA_NAME(7) AS Result;
Wynik:
+----------+ | Result | |----------| | Fact | +----------+
Przykład 3 – Przełączanie baz danych
Poprzedni przykład został uruchomiony w bazie danych, która miała schemat o identyfikatorze 7. Jeśli przełączę się na inną bazę danych, mogę otrzymać inną nazwę schematu lub w ogóle jej brak.
Oto przykład tego, co mam na myśli.
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];
Wynik:
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)
Cztery kolumny zwracają NULL
w bazie danych muzyki, ponieważ nie ma schematu z tym identyfikatorem.
Przykład 4 – Bardziej czytelne wyniki zapytań
Oto przykład użycia SCHEMA_NAME()
aby przedstawić nazwę schematu zamiast jego identyfikatora podczas zwracania wyników z widoku systemowego.
SELECT schema_id, SCHEMA_NAME(schema_id) AS [Schema Name], name AS [Table Name] FROM sys.tables;
Wynik:
+-------------+---------------+-------------------------+ | 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
widok systemowy zwraca identyfikator schematu, ale nie jego nazwę. Nie stanowi to jednak problemu. ID jest wystarczające, ponieważ możemy użyć SCHEMA_NAME()
aby wyświetlić nazwę schematu na podstawie tego identyfikatora.
Gdybyśmy nie mieli SCHEMA_NAME()
funkcji, musielibyśmy wykonać sprzężenie w sys.schemas
widok systemowy tylko po to, aby uzyskać nazwę schematu.
Przykład 5 – W klauzuli WHERE
Oto przykład użycia SCHEMA_NAME()
w WHERE
klauzula.
USE WideWorldImportersDW; SELECT * FROM sys.schemas WHERE name = SCHEMA_NAME(7);
Wynik:
+--------+-------------+----------------+ | name | schema_id | principal_id | |--------+-------------+----------------| | Fact | 7 | 1 | +--------+-------------+----------------+
Jeśli chcesz uzyskać identyfikator schematu, użyj SCHEMA_ID()
funkcjonować.