Sqlserver
 sql >> Teknologi Basis Data >  >> RDS >> Sqlserver

Periksa Apakah Tabel Memiliki Kolom TIMESTAMP di SQL Server dengan OBJECTPROPERTY()

Anda dapat menggunakan OBJECTPROPERTY() fungsi di SQL Server untuk memeriksa apakah tabel memiliki stempel waktu . atau tidak kolom.

Untuk melakukannya, teruskan ID objek tabel sebagai argumen pertama, dan TableHasTimestamp sebagai argumen kedua. Fungsi mengembalikan 1 atau 0 tergantung apakah ia memiliki stempel waktu . atau tidak kolom.

Nilai kembalian 1 berarti tabel tidak memiliki stempel waktu kolom, dan nilai 0 berarti tidak.

Ini juga berfungsi untuk kolom yang telah didefinisikan sebagai versi baris (stempel waktu adalah sinonim yang tidak digunakan lagi untuk rowversion ).

Contoh 1 – Kolom stempel waktu

Berikut adalah contoh cepat untuk didemonstrasikan pada tabel dengan stempel waktu kolom.

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

Hasil:

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

Dalam hal ini, Test_timestamp database memiliki tabel dengan ID yang diberikan, dan memiliki stempel waktu kolom.

Saya menggunakan OBJECT_ID() berfungsi untuk mengambil ID tabel berdasarkan namanya.

Contoh 2 – Kolom rowversion

Seperti yang disebutkan, metode ini juga berfungsi jika Anda menggunakan rowversion untuk menentukan kolom.

Sebagai contoh, jika saya membuat tabel sebagai berikut:

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

Dan kemudian jalankan pemeriksaan di atasnya:

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

Hasil:

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

Saya perhatikan bahwa, meskipun dokumentasi Microsoft menyatakan bahwa stempel waktu adalah sinonim dari rowversion , pada tulisan ini, membuat kolom sebagai rowversion pada sistem SQL Server 2017 saya sebenarnya membuatnya muncul sebagai stempel waktu kolom. Jika saya melihat jenisnya setelah kolom dibuat, itu ditampilkan sebagai kolom stempel waktu.

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

Hasil:

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

Contoh 3 – Tabel Tanpa Kolom TIMESTAMP

Inilah yang terjadi jika tabel tidak memiliki stempel waktu kolom.

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

Hasil:

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

Dalam hal ini, objeknya adalah tabel tetapi tidak memiliki stempel waktu kolom.

Contoh 4 – Ketika Objek Bukan Tabel

Inilah yang terjadi ketika database memang berisi objek dengan ID, tetapi objek itu bahkan bukan tabel.

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

Hasil:

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

Contoh 5 – Objek Tidak Ada

SQL Server mengasumsikan bahwa ID objek dalam konteks database saat ini. Jika Anda memasukkan ID objek dari database yang berbeda, Anda akan mendapatkan hasil NULL atau Anda akan mendapatkan hasil yang salah.

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

Hasil:

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

Dalam hal ini database tidak berisi objek dengan nama atau ID itu, jadi saya mendapatkan hasil NULL.

Anda juga akan mendapatkan NULL pada kesalahan atau jika Anda tidak memiliki izin untuk melihat objek.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Perbedaan Antara sys.columns, sys.system_columns, &sys.all_columns di SQL Server

  2. Perkirakan Penghematan Kompresi Data di SQL Server

  3. Mengatasi SQL Server Database Terjebak dalam Masalah Mode Tersangka Secara Efisien

  4. Ubah Mode Suspect Database SQL ke Mode Normal Dengan Query

  5. Pengkodean karakter default SQL Server