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

Kiểm tra xem một bảng có cột TIMESTAMP trong SQL Server với OBJECTPROPERTY () hay không

Bạn có thể sử dụng OBJECTPROPERTY() trong SQL Server để kiểm tra xem bảng có dấu thời gian hay không cột.

Để thực hiện việc này, hãy chuyển ID đối tượng của bảng làm đối số đầu tiên và TableHasTimestamp như đối số thứ hai. Hàm trả về 1 hoặc 0 tùy thuộc vào việc nó có dấu thời gian hay không cột.

Giá trị trả về 1 có nghĩa là bảng hiện dấu thời gian và giá trị 0 nghĩa là không.

Điều này cũng hoạt động đối với các cột đã được xác định là đảo hàng ( dấu thời gian là từ đồng nghĩa không dùng nữa của rowversion ).

Ví dụ 1 - Cột dấu thời gian

Dưới đây là một ví dụ nhanh để minh họa trên bàn có dấu thời gian cột.

USE Test_timestamp;
SELECT OBJECTPROPERTY(OBJECT_ID('Pet'), 'TableHasTimestamp') AS [TableHasTimestamp];

Kết quả:

+---------------------+
| TableHasTimestamp   |
|---------------------|
| 1                   |
+---------------------+

Trong trường hợp này, Test_timestamp cơ sở dữ liệu có một bảng với ID được cung cấp và nó có dấu thời gian cột.

Tôi sử dụng OBJECT_ID() để truy xuất ID của bảng dựa trên tên của nó.

Ví dụ 2 - Cột chuyển đổi hàng

Như đã đề cập, phương pháp này cũng hoạt động nếu bạn đã sử dụng chuyển đổi hàng hóa để xác định cột.

Ví dụ:nếu tôi tạo một bảng như sau:

CREATE TABLE Owner (
  OwnerId int PRIMARY KEY, 
  OwnerName varchar(255), 
  RowVersion rowversion
  );

Và sau đó chạy kiểm tra nó:

SELECT OBJECTPROPERTY(OBJECT_ID('Owner'), 'TableHasTimestamp') AS [TableHasTimestamp];

Kết quả:

+---------------------+
| TableHasTimestamp   |
|---------------------|
| 1                   |
+---------------------+

Tôi nhận thấy rằng, mặc dù tài liệu của Microsoft nói rằng dấu thời gian là từ đồng nghĩa của rowversion , kể từ khi viết bài này, việc tạo một cột dưới dạng rowversion trên hệ thống SQL Server 2017 của tôi thực sự làm cho nó xuất hiện dưới dạng dấu thời gian cột. Nếu tôi xem loại sau khi cột đã được tạo, nó được hiển thị dưới dạng cột dấu thời gian.

SELECT 
  OBJECT_NAME(object_id) AS [Table],
  name AS [Column],
  TYPE_NAME(system_type_id) AS [Type]
FROM sys.columns
WHERE OBJECT_NAME(object_id) = 'Owner';

Kết quả:

+---------+------------+-----------+
| Table   | Column     | Type      |
|---------+------------+-----------|
| Owner   | OwnerId    | int       |
| Owner   | OwnerName  | varchar   |
| Owner   | RowVersion | timestamp |
+---------+------------+-----------+

Ví dụ 3 - Các bảng không có cột TIMESTAMP

Đây là điều xảy ra khi bảng không có dấu thời gian cột.

USE WideWorldImportersDW;
SELECT OBJECTPROPERTY(OBJECT_ID('Dimension.City'), 'TableHasTimestamp') AS [TableHasTimestamp];

Kết quả:

+---------------------+
| TableHasTimestamp   |
|---------------------|
| 0                   |
+---------------------+

Trong trường hợp này, đối tượng là một bảng nhưng nó không có dấu thời gian cột.

Ví dụ 4 - Khi Đối tượng không phải là Bảng

Đây là những gì sẽ xảy ra khi cơ sở dữ liệu chứa một đối tượng có ID, nhưng đối tượng đó thậm chí không phải là một bảng.

SELECT OBJECTPROPERTY(OBJECT_ID('Sequences.ReseedAllSequences'), 'TableHasTimestamp') AS [TableHasTimestamp];

Kết quả:

+---------------------+
| TableHasTimestamp   |
|---------------------|
| NULL                |
+---------------------+

Ví dụ 5 - Đối tượng không tồn tại

SQL Server giả định rằng ID đối tượng nằm trong ngữ cảnh cơ sở dữ liệu hiện tại. Nếu bạn chuyển một ID đối tượng từ một cơ sở dữ liệu khác, bạn sẽ nhận được kết quả NULL hoặc bạn sẽ nhận được kết quả không chính xác.

SELECT 
  OBJECTPROPERTY(OBJECT_ID('InvalidObject'), 'TableHasTimestamp') AS [InvalidObject],
  OBJECTPROPERTY(12345678, 'TableHasTimestamp') AS [12345678];

Kết quả:

+-----------------+------------+
| InvalidObject   | 12345678   |
|-----------------+------------|
| NULL            | NULL       |
+-----------------+------------+

Trong trường hợp này, cơ sở dữ liệu không chứa các đối tượng có tên hoặc ID đó, vì vậy tôi nhận được kết quả NULL.

Bạn cũng sẽ nhận được NULL do lỗi hoặc nếu bạn không có quyền xem đối tượng.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Tạo một UDF liên kết lược đồ trong SQL Server

  2. Sử dụng biến trong câu lệnh SQL LIKE

  3. Đặt lại hạt giống danh tính sau khi xóa bản ghi trong SQL Server

  4. Cách xem nhiều truy vấn và kết quả song song trong SQL Server Management Studio (SSMS) - Hướng dẫn sử dụng SQL Server / TSQL Phần 14

  5. Tạo công việc đại lý máy chủ SQL trong Azure Data Studio