Trong SQL Server, bạn có thể sử dụng OBJECTPROPERTY()
chức năng để kiểm tra loại của một đối tượng. Cụ thể hơn, bạn có thể kiểm tra xem đó có phải là một loại cụ thể hay không.
Ví dụ:IsTable
thuộc tính cho bạn biết đó có phải là một bảng hay không, IsView
thuộc tính cho bạn biết đó có phải là một lượt xem hay không, v.v.
Bài viết này cung cấp một số ví dụ cơ bản để kiểm tra xem một đối tượng có phải là bảng, dạng xem, thủ tục được lưu trữ hay hàm có giá trị bảng hay không.
Ví dụ 1 - Kiểm tra Bảng
Dưới đây là một ví dụ kiểm tra xem một đối tượng có phải là một bảng hay không.
USE Music; SELECT OBJECTPROPERTY(OBJECT_ID(N'dbo.Artists'), 'IsTable') AS [IsTable];
Kết quả:
+-----------+ | IsTable | |-----------| | 1 | +-----------+
Ở đây, tên đối tượng là Artists
và lược đồ là dbo
.
Trong trường hợp này, kết quả là 1
, chỉ ra rằng đối tượng trên thực tế là một bảng.
Ví dụ 2 - Kiểm tra Chế độ xem
Dưới đây là một ví dụ kiểm tra xem một đối tượng có phải là một chế độ xem hay không.
USE Music; SELECT OBJECTPROPERTY(OBJECT_ID(N'dbo.Artists'), 'IsView') AS [IsView];
Kết quả:
+----------+ | IsView | |----------| | 0 | +----------+
Trong trường hợp này, tôi đang kiểm tra cùng một đối tượng từ ví dụ trước và vì vậy chúng tôi đã biết đó không phải là một chế độ xem. Do đó, kết quả là 0
, chỉ ra rằng đó không phải là một chế độ xem.
Đây là một ví dụ khác, lần này đối tượng trên thực tế là một chế độ xem:
SELECT OBJECTPROPERTY(OBJECT_ID(N'dbo.RockAlbums'), 'IsView') AS [IsView];
Kết quả:
+----------+ | IsView | |----------| | 1 | +----------+
Lưu ý rằng tôi đã xóa USE Music;
một phần, bởi vì tôi đã có trong cơ sở dữ liệu đó. OBJECTPROPERTY()
chỉ kiểm tra các đối tượng trong phạm vi lược đồ trong cơ sở dữ liệu hiện tại.
Ví dụ 3 - Câu lệnh có điều kiện
Chúng ta có thể đưa khái niệm này đi một bước xa hơn và kết hợp các ví dụ trước đó thành một IF
tuyên bố. Bằng cách đó, chúng ta có thể chạy một câu lệnh duy nhất để tìm ra loại đối tượng.
Dưới đây là các ví dụ cơ bản chỉ xuất ra loại đối tượng.
Bảng
DECLARE @TheObject varchar(255) = 'dbo.Artists'; IF (SELECT OBJECTPROPERTY(OBJECT_ID(@TheObject), 'IsView') AS [IsView]) = 1 PRINT 'View'; ELSE IF (SELECT OBJECTPROPERTY(OBJECT_ID(@TheObject), 'IsTable') AS [IsTable]) = 1 PRINT 'Table'; ELSE IF (SELECT OBJECTPROPERTY(OBJECT_ID(@TheObject), 'IsProcedure') AS [IsProcedure]) = 1 PRINT 'Stored Procedure'; ELSE IF (SELECT OBJECTPROPERTY(OBJECT_ID(@TheObject), 'IsTableFunction') AS [IsTableFunction]) = 1 PRINT 'Table-valued Function'; ELSE PRINT 'Unknown. Maybe add more types to this statement.';
Kết quả:
Table
Trong trường hợp này, đối tượng là một bảng.
Dưới đây là các ví dụ khác sử dụng cùng một câu lệnh, nhưng với các loại đối tượng khác nhau.
Xem
DECLARE @TheObject varchar(255) = 'dbo.RockAlbums'; IF (SELECT OBJECTPROPERTY(OBJECT_ID(@TheObject), 'IsView') AS [IsView]) = 1 PRINT 'View'; ELSE IF (SELECT OBJECTPROPERTY(OBJECT_ID(@TheObject), 'IsTable') AS [IsTable]) = 1 PRINT 'Table'; ELSE IF (SELECT OBJECTPROPERTY(OBJECT_ID(@TheObject), 'IsProcedure') AS [IsProcedure]) = 1 PRINT 'Stored Procedure'; ELSE IF (SELECT OBJECTPROPERTY(OBJECT_ID(@TheObject), 'IsTableFunction') AS [IsTableFunction]) = 1 PRINT 'Table-valued Function'; ELSE PRINT 'Unknown. Maybe add more types to this statement.';
Kết quả:
View
Thủ tục được lưu trữ
DECLARE @TheObject varchar(255) = 'dbo.uspGetAlbumsByArtist'; IF (SELECT OBJECTPROPERTY(OBJECT_ID(@TheObject), 'IsView') AS [IsView]) = 1 PRINT 'View'; ELSE IF (SELECT OBJECTPROPERTY(OBJECT_ID(@TheObject), 'IsTable') AS [IsTable]) = 1 PRINT 'Table'; ELSE IF (SELECT OBJECTPROPERTY(OBJECT_ID(@TheObject), 'IsProcedure') AS [IsProcedure]) = 1 PRINT 'Stored Procedure'; ELSE IF (SELECT OBJECTPROPERTY(OBJECT_ID(@TheObject), 'IsTableFunction') AS [IsTableFunction]) = 1 PRINT 'Table-valued Function'; ELSE PRINT 'Unknown. Maybe add more types to this statement.';
Kết quả:
Stored Procedure
Chức năng định giá bảng
DECLARE @TheObject varchar(255) = 'dbo.ufn_AlbumsByGenre1'; IF (SELECT OBJECTPROPERTY(OBJECT_ID(@TheObject), 'IsView') AS [IsView]) = 1 PRINT 'View'; ELSE IF (SELECT OBJECTPROPERTY(OBJECT_ID(@TheObject), 'IsTable') AS [IsTable]) = 1 PRINT 'Table'; ELSE IF (SELECT OBJECTPROPERTY(OBJECT_ID(@TheObject), 'IsProcedure') AS [IsProcedure]) = 1 PRINT 'Stored Procedure'; ELSE IF (SELECT OBJECTPROPERTY(OBJECT_ID(@TheObject), 'IsTableFunction') AS [IsTableFunction]) = 1 PRINT 'Table-valued Function'; ELSE PRINT 'Unknown. Maybe add more types to this statement.';
Kết quả:
Table-valued Function
Bạn có thể thêm nhiều loại vào câu lệnh để làm cho nó hữu ích hơn. Tôi đã liệt kê các đối số OBJECTPROPERTY()
chấp nhận trên trang này. Tuy nhiên, không phải tất cả chúng đều là loại đối tượng - có nhiều thuộc tính khác nhau mà bạn có thể kiểm tra.
Để có giải thích đầy đủ về từng thuộc tính, hãy xem tài liệu của Microsoft.