Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

Как SCHEMA_NAME() работи в SQL Server

В 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() функция.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Как да активирате/деактивирате достъпа до данни в SQL Server (пример за T-SQL)

  2. Конкатениране на стойности въз основа на ID

  3. Ограничение по подразбиране на SQL за вмъкване на колона със стойност по подразбиране в таблицата на SQL Server

  4. Предимства на производителността на SQL Server 2016 Enterprise Edition

  5. Как да задам име на таблица в динамична SQL заявка?