Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

Проверете дали дадена таблица има колона TIMESTAMP в SQL Server с OBJECTPROPERTY()

Можете да използвате OBJECTPROPERTY() функция в SQL Server, за да провери дали дадена таблица има времево клеймо колона.

За да направите това, предайте идентификатора на обекта на таблицата като първи аргумент и TableHasTimestamp като втори аргумент. Функцията връща 1 или 0 в зависимост от това дали има клеймо за време колона.

Връщана стойност на 1 означава, че таблицата прави имат клеймо за време колона и стойност 0 означава, че не.

Това работи и за колони, които са дефинирани като версия на ред (клеймо за време е отхвърленият синоним на версия на ред ).

Пример 1 – Колона с времева марка

Ето бърз пример за демонстрация на таблица с клеймо за време колона.

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

Резултат:

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

В този случай Test_timestamp базата данни има таблица с предоставения идентификатор и има клеймо за време колона.

Използвам OBJECT_ID() функция за извличане на идентификатора на таблицата въз основа на нейното име.

Пример 2 – Колона с версия на реда

Както споменахме, този метод работи и ако сте използвали версия на ред за да дефинирате колоната.

Например, ако създам таблица, както следва:

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

След това го проверете:

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

Резултат:

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

Забелязвам това, въпреки че в документацията на Microsoft е посочено това timestamp е синоним на версия на ред , към момента на писане, създаване на колона като версия на ред на моята SQL Server 2017 система всъщност го показва като времево клеймо колона. Ако погледна типа след създаването на колоната, той се показва като колона с времеви печат.

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

Резултат:

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

Пример 3 – Таблици без колона TIMESTAMP

Ето какво се случва, когато таблицата няма клеймо за време колона.

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

Резултат:

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

В този случай обектът е таблица, но няма клеймо за време колона.

Пример 4 – Когато обектът не е таблица

Ето какво се случва, когато базата данни съдържа обект с идентификатор, но този обект дори не е таблица.

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

Резултат:

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

Пример 5 – Обектът не съществува

SQL Server приема, че идентификаторът на обекта е в текущия контекст на базата данни. Ако подадете идентификатор на обект от друга база данни, или ще получите резултат NULL, или ще получите неправилни резултати.

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

Резултат:

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

В този случай базата данни не съдържа обекти с това име или ID и така получавам резултат NULL.

Освен това ще получите NULL при грешка или ако нямате разрешение да видите обекта.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. DATETIME2FROMPARTS() Примери в SQL Server (T-SQL)

  2. Направете лесна производителност на SQL Server

  3. Тип текст на SQL Server спрямо тип данни varchar

  4. Как да генерирате изявления за вмъкване от данни на Excel и да заредите в таблица на SQL Server - SQL Server / TSQL урок, част 103

  5. Персонализирайте алармите в облака на прожекторите