Trong SQL Server, bạn có thể sử dụng SCHEMA_ID()
hàm để trả về ID của một lược đồ nhất định. Cụ thể hơn, hàm này trả về ID lược đồ được liên kết với tên lược đồ.
Nó giống như SCHEMA_NAME()
ngoại trừ nó trả về ID của lược đồ thay vì tên (và nó chấp nhận tham số tên thay vì ID).
Nếu bạn không chuyển tên giản đồ cho hàm, nó sẽ trả về ID 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ề ID của lược đồ mặc định của trình gọi.
SELECT SCHEMA_ID() AS Result;
Kết quả:
+----------+ | Result | |----------| | 1 | +----------+
Điều này trả về ID của lược đồ mặc định của trình gọi vì tôi không chỉ định rõ ràng bất kỳ tên lược đồ nào khác.
Đây là một lần nữa, cùng với tên lược đồ.
SELECT SCHEMA_ID() AS [Schema ID], SCHEMA_NAME() AS [Schema Name];
Kết quả:
+-------------+---------------+ | Schema ID | Schema Name | |-------------+---------------| | 1 | dbo | +-------------+---------------+
Ví dụ 2 - Chỉ định một giản đồ khác
Trong ví dụ này, tôi chuyển một cách rõ ràng tên lược đồ cho hàm.
SELECT SCHEMA_ID('Dimension') AS Result;
Kết quả:
+----------+ | Result | |----------| | 6 | +----------+
Điều này cho tôi biết rằng lược đồ được gọi là Thứ nguyên có ID là 6.
Ví dụ 3 - Chuyển đổi cơ sở dữ liệu
Ví dụ trước chỉ tình cờ được chạy trong cơ sở dữ liệu có một lược đồ được gọi là Thứ nguyên. 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 ID giản đồ khác hoặc không có ID nào cả.
Đây là một ví dụ về ý tôi muốn nói.
USE WideWorldImportersDW; SELECT SCHEMA_ID('Dimension') AS Result; USE Music; SELECT SCHEMA_ID('Dimension') AS Result;
Kết quả:
Changed database context to 'WideWorldImportersDW'. +----------+ | Result | |----------| | 6 | +----------+ (1 row affected) Changed database context to 'Music'. +----------+ | Result | |----------| | NULL | +----------+ (1 row affected)
Kết quả thứ hai trả về NULL
vì không có giản đồ nào được gọi là Thứ nguyên trong cơ sở dữ liệu Âm nhạc.
Ví dụ 4 - Trong mệnh đề WHERE
Sử dụng SCHEMA_ID()
trong một WHERE
mệnh đề có thể là một cách tiện dụng để lọc kết quả theo lược đồ.
Trong SQL Server, các dạng xem hệ thống khác nhau sử dụng schema_id
để lưu trữ ID lược đồ nhưng không lưu trữ tên lược đồ. Do đó, bạn cần biết ID giản đồ nếu định lọc kết quả theo giản đồ. Đó là nơi SCHEMA_ID()
có thể rất hữu ích. Nó giúp bạn không phải tham gia vào sys.schemas
xem chỉ để tìm ra tên lược đồ.
Đây là ví dụ về việc sử dụng SCHEMA_ID()
trong một WHERE
mệnh đề.
USE WideWorldImportersDW; SELECT name, type_desc FROM sys.objects WHERE schema_id = SCHEMA_ID('Dimension');
Kết quả:
Changed database context to 'WideWorldImportersDW'. +----------------------------------------------------+------------------------+ | name | type_desc | |----------------------------------------------------+------------------------| | City | USER_TABLE | | PK_Dimension_City | PRIMARY_KEY_CONSTRAINT | | DF_Dimension_City_City_Key | DEFAULT_CONSTRAINT | | Customer | USER_TABLE | | PK_Dimension_Customer | PRIMARY_KEY_CONSTRAINT | | DF_Dimension_Customer_Customer_Key | DEFAULT_CONSTRAINT | | Date | USER_TABLE | | PK_Dimension_Date | PRIMARY_KEY_CONSTRAINT | | Employee | USER_TABLE | | PK_Dimension_Employee | PRIMARY_KEY_CONSTRAINT | | DF_Dimension_Employee_Employee_Key | DEFAULT_CONSTRAINT | | Payment Method | USER_TABLE | | PK_Dimension_Payment_Method | PRIMARY_KEY_CONSTRAINT | | DF_Dimension_Payment_Method_Payment_Method_Key | DEFAULT_CONSTRAINT | | Stock Item | USER_TABLE | | PK_Dimension_Stock_Item | PRIMARY_KEY_CONSTRAINT | | DF_Dimension_Stock_Item_Stock_Item_Key | DEFAULT_CONSTRAINT | | Supplier | USER_TABLE | | PK_Dimension_Supplier | PRIMARY_KEY_CONSTRAINT | | DF_Dimension_Supplier_Supplier_Key | DEFAULT_CONSTRAINT | | Transaction Type | USER_TABLE | | PK_Dimension_Transaction_Type | PRIMARY_KEY_CONSTRAINT | | DF_Dimension_Transaction_Type_Transaction_Type_Key | DEFAULT_CONSTRAINT | +----------------------------------------------------+------------------------+ (23 rows affected)