Sqlserver
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Sqlserver

Cách SCHEMA_NAME () hoạt động trong SQL Server

Trong SQL Server, bạn có thể sử dụng SCHEMA_NAME() hàm để trả về tên của một lược đồ cụ thể. Cách hoạt động là nó trả về tên lược đồ được liên kết với ID lược đồ.

Nếu bạn không chuyển ID giản đồ cho hàm, nó sẽ trả về tên của lược đồ mặc định của trình gọi.

Ví dụ 1 - Lược đồ Mặc định Trả lại

Dưới đây là một ví dụ trả về tên của lược đồ mặc định của trình gọi.

SELECT SCHEMA_NAME() AS Result;

Kết quả:

+----------+
| Result   |
|----------|
| dbo      |
+----------+

Điều này trả về tên của lược đồ mặc định của trình gọi vì tôi đã không chỉ định rõ ràng một ID giản đồ khác.

Ví dụ 2 - Chỉ định một giản đồ khác

Trong ví dụ này, tôi chuyển một ID giản đồ cho hàm.

SELECT SCHEMA_NAME(7) AS Result;

Kết quả:

+----------+
| Result   |
|----------|
| Fact     |
+----------+

Ví dụ 3 - Chuyển đổi cơ sở dữ liệu

Ví dụ trước chỉ tình cờ được chạy trong một cơ sở dữ liệu có một lược đồ với ID là 7. Nếu tôi chuyển sang một cơ sở dữ liệu khác, tôi có thể nhận được một tên lược đồ khác hoặc không có tên nào cả.

Đây là một ví dụ về ý tôi muốn nói.

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]; 

Kết quả:

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)

Bốn cột trả về NULL trên cơ sở dữ liệu Âm nhạc, vì không có giản đồ nào có ID đó.

Ví dụ 4 - Kết quả truy vấn có thể đọc thêm

Đây là ví dụ về việc sử dụng SCHEMA_NAME() để hiển thị tên lược đồ thay vì ID của nó khi trả về kết quả từ chế độ xem hệ thống.

SELECT 
  schema_id,
  SCHEMA_NAME(schema_id) AS [Schema Name],
  name AS [Table Name]
FROM sys.tables;

Kết quả:

+-------------+---------------+-------------------------+
| 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 chế độ xem hệ thống trả về ID lược đồ nhưng không trả về tên của nó. Đó không phải là vấn đề. ID là đủ, vì chúng tôi có thể sử dụng SCHEMA_NAME() để hiển thị tên của lược đồ, dựa trên ID đó.

Nếu chúng tôi không có SCHEMA_NAME() , chúng tôi cần tham gia vào sys.schemas chế độ xem hệ thống chỉ để lấy tên của lược đồ.

Ví dụ 5 - Trong mệnh đề WHERE

Đây là ví dụ về việc sử dụng SCHEMA_NAME() trong một WHERE mệnh đề.

USE WideWorldImportersDW;
SELECT * FROM sys.schemas
WHERE name = SCHEMA_NAME(7);

Kết quả:

+--------+-------------+----------------+
| name   | schema_id   | principal_id   |
|--------+-------------+----------------|
| Fact   | 7           | 1              |
+--------+-------------+----------------+

Nếu bạn cần lấy ID của lược đồ, hãy sử dụng SCHEMA_ID() hàm số.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Làm thế nào để chuyển đổi không gian trống thành giá trị null, sử dụng SQL Server?

  2. Mô phỏng CONNECT BY PRIOR của Oracle trong SQL Server

  3. Cách xóa cột trong SQL Server bằng T-SQL

  4. Cách khắc phục “Chuyển đổi không thành công khi chuyển đổi giá trị thành kiểu dữ liệu” trong SQL Server

  5. Có sự khác biệt về hiệu suất giữa CTE, Truy vấn phụ, Bảng tạm thời hoặc Biến bảng không?