In SQL Server können Sie SCHEMA_NAME()
verwenden Funktion, um den Namen eines bestimmten Schemas zurückzugeben. Es funktioniert so, dass es den Schemanamen zurückgibt, der einer Schema-ID zugeordnet ist.
Wenn Sie der Funktion keine Schema-ID übergeben, gibt sie den Namen des Standardschemas des Aufrufers zurück.
Beispiel 1 – Standardschema zurückgeben
Hier ist ein Beispiel, das den Namen des Standardschemas des Aufrufers zurückgibt.
SELECT SCHEMA_NAME() AS Result;
Ergebnis:
+----------+ | Result | |----------| | dbo | +----------+
Dies gibt den Namen des Standardschemas des Aufrufers zurück, da ich nicht explizit eine andere Schema-ID angegeben habe.
Beispiel 2 – Geben Sie ein anderes Schema an
In diesem Beispiel übergebe ich eine Schema-ID an die Funktion.
SELECT SCHEMA_NAME(7) AS Result;
Ergebnis:
+----------+ | Result | |----------| | Fact | +----------+
Beispiel 3 – Datenbankwechsel
Das vorherige Beispiel wurde zufällig in einer Datenbank ausgeführt, die ein Schema mit der ID 7 hatte. Wenn ich zu einer anderen Datenbank wechsle, erhalte ich möglicherweise einen anderen Schemanamen oder gar keinen Namen.
Hier ist ein Beispiel dafür, was ich meine.
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];
Ergebnis:
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 Spalten geben NULL
zurück in der Musikdatenbank, weil es kein Schema mit dieser ID gibt.
Beispiel 4 – Besser lesbare Abfrageergebnisse
Hier ist ein Beispiel für die Verwendung von SCHEMA_NAME()
um den Schemanamen anstelle seiner ID anzuzeigen, wenn Ergebnisse aus einer Systemansicht zurückgegeben werden.
SELECT schema_id, SCHEMA_NAME(schema_id) AS [Schema Name], name AS [Table Name] FROM sys.tables;
Ergebnis:
+-------------+---------------+-------------------------+ | 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 | +-------------+---------------+-------------------------+
Die sys.tables
Die Systemansicht gibt die Schema-ID, aber nicht ihren Namen zurück. Das ist aber kein Problem. Die ID ist ausreichend, da wir SCHEMA_NAME()
verwenden können um den Namen des Schemas basierend auf dieser ID anzuzeigen.
Wenn wir SCHEMA_NAME()
nicht hätten -Funktion müssten wir einen Join für die sys.schemas
durchführen Systemansicht, um den Namen des Schemas zu erhalten.
Beispiel 5 – In einer WHERE-Klausel
Hier ist ein Beispiel für die Verwendung von SCHEMA_NAME()
in einem WHERE
Klausel.
USE WideWorldImportersDW; SELECT * FROM sys.schemas WHERE name = SCHEMA_NAME(7);
Ergebnis:
+--------+-------------+----------------+ | name | schema_id | principal_id | |--------+-------------+----------------| | Fact | 7 | 1 | +--------+-------------+----------------+
Wenn Sie die ID eines Schemas benötigen, verwenden Sie SCHEMA_ID()
Funktion.