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.