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