sql >> Database >  >> RDS >> Sqlserver

Hoe SCHEMA_NAME() werkt in SQL Server

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.


  1. SQL Server ALL-operator uitgelegd

  2. DATETIMEOFFSETFROMPARTS() Voorbeelden in SQL Server (T-SQL)

  3. Een inleiding tot hoge beschikbaarheid van databases voor MySQL en MariaDB

  4. Verschil tussen subquery en gecorreleerde subquery