Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

Jak SCHEMA_NAME() działa w SQL Server

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ć.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak wygenerować instrukcję dodawania kolumny dla wszystkich tabel w bazie danych w programie SQL Server — część samouczka SQL Server / T-SQL 49

  2. Poznaj relacje między wszystkimi tabelami bazy danych w SQL Server

  3. Uzyskaj liczbę nieudanych prób logowania dla logowania z powodu nieprawidłowego hasła w programie SQL Server (T-SQL)

  4. Czy istnieje sposób na osadzenie raportów i pulpitów nawigacyjnych Power Bi w aplikacji desktopowej vb.net lub C# z bazą danych sql Server 2008?

  5. SQL Server 2017:dostępne funkcje w systemie Linux