Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

Sprawdź, czy tabela ma kolumnę TIMESTAMP w SQL Server za pomocą OBJECTPROPERTY()

Możesz użyć OBJECTPROPERTY() funkcja w SQL Server, aby sprawdzić, czy tabela ma sygnaturę czasową kolumna.

Aby to zrobić, przekaż identyfikator obiektu tabeli jako pierwszy argument, a TableHasTimestamp jako drugi argument. Funkcja zwraca 1 lub 0 w zależności od tego, czy ma sygnaturę czasową, czy nie kolumna.

Zwracana wartość 1 oznacza, że ​​tabela działa mieć sygnaturę czasową kolumna i wartość 0 oznacza, że ​​nie.

Działa to również w przypadku kolumn, które zostały zdefiniowane jako rowversion (sygnatura czasowa jest przestarzałym synonimem rowversion ).

Przykład 1 – Kolumna sygnatury czasowej

Oto krótki przykład do zademonstrowania na stole z sygnaturą czasową kolumna.

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

Wynik:

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

W tym przypadku Test_timestamp baza danych zawiera tabelę z podanym identyfikatorem i ma sygnaturę czasową kolumna.

Używam OBJECT_ID() funkcja do pobrania identyfikatora tabeli na podstawie jej nazwy.

Przykład 2 – Kolumna rowversion

Jak wspomniano, ta metoda działa również, jeśli użyłeś rowversion aby zdefiniować kolumnę.

Na przykład, jeśli utworzę tabelę w następujący sposób:

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

A następnie sprawdź to:

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

Wynik:

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

Zauważyłem to, chociaż dokumentacja Microsoftu stwierdza, że ​​sygnatura czasowa jest synonimem rowversion , w chwili pisania tego tekstu, tworzenie kolumny jako rowversion w moim systemie SQL Server 2017 faktycznie wyświetla się jako sygnatura czasowa kolumna. Jeśli spojrzę na typ po utworzeniu kolumny, jest on wyświetlany jako kolumna sygnatury czasowej.

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

Wynik:

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

Przykład 3 – Tabele bez kolumny TIMESTAMP

Oto, co się dzieje, gdy tabela nie ma sygnatury czasowej kolumna.

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

Wynik:

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

W tym przypadku obiektem jest tabela, ale nie ma sygnatury czasowej kolumna.

Przykład 4 – Kiedy obiekt nie jest tabelą

Oto, co się dzieje, gdy baza danych zawiera obiekt z identyfikatorem, ale ten obiekt nie jest nawet tabelą.

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

Wynik:

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

Przykład 5 – Obiekt nie istnieje

SQL Server zakłada, że ​​identyfikator obiektu znajduje się w bieżącym kontekście bazy danych. Jeśli przekażesz identyfikator obiektu z innej bazy danych, otrzymasz wynik NULL lub otrzymasz nieprawidłowe wyniki.

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

Wynik:

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

W tym przypadku baza danych nie zawiera obiektów o tej nazwie lub identyfikatorze, więc otrzymuję wynik NULL.

Otrzymasz również NULL w przypadku błędu lub jeśli nie masz uprawnień do przeglądania obiektu.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak radzić sobie z nazwami kolumn SQL, które wyglądają jak słowa kluczowe SQL?

  2. SQL Server:dynamiczna klauzula where

  3. Różnica między sys.views, sys.system_views i sys.all_views w programie SQL Server

  4. Uzyskaj AVG ignorując wartości Null lub Zero

  5. Jak wykonać zapytanie SQL bez wyświetlania wyników