T-SQL tidak menyertakan IF NOT EXISTS
klausa dengan CREATE TABLE
pernyataan, seperti yang dilakukan beberapa DBMS lainnya.
Oleh karena itu, jika kita ingin memeriksa keberadaan tabel sebelum kita membuatnya di SQL Server, kita perlu menggunakan metode lain.
Opsi 1:Periksa ID Objek
Di SQL Server, kita dapat menggunakan OBJECT_ID()
fungsi untuk memeriksa keberadaan tabel sebelum kita mencoba membuatnya:
IF OBJECT_ID(N'dbo.t1', N'U') IS NULL
CREATE TABLE dbo.t1 (
c1 int,
c2 varchar(10)
);
GO
Contoh di atas memeriksa ID objek untuk dbo.t1
tabel.
Argumen kedua untuk OBJECT_ID()
menentukan jenis objek yang kita cari. Dalam hal ini kami menggunakan U
, yang untuk “tabel yang ditentukan pengguna”.
OBJECT_ID()
mengembalikan nomor identifikasi objek database dari objek cakupan skema. Jika objek tidak ada, atau jika Anda tidak memiliki akses ke sana, fungsi mengembalikan NULL. Oleh karena itu, kita dapat memeriksa nilai NULL, dan hanya membuat tabel jika fungsi ini mengembalikan NULL.
Kita dapat menggunakan OBJECT_ID()
fungsi untuk memeriksa ID objek tabel setelah dibuat:
SELECT OBJECT_ID(N'dbo.t1', N'U');
Contoh hasil:
354100302
Jika kami ingin sedikit lebih banyak info, kami dapat melakukan sesuatu seperti ini:
sp_tables 't1';
Hasil:
+-------------------+---------------+--------------+--------------+-----------+ | TABLE_QUALIFIER | TABLE_OWNER | TABLE_NAME | TABLE_TYPE | REMARKS | |-------------------+---------------+--------------+--------------+-----------| | KrankyKranes | dbo | t1 | TABLE | NULL | +-------------------+---------------+--------------+--------------+-----------+
Di sini, KrankyKranes
adalah database tempat saya membuat tabel.
Ada banyak cara lain untuk melihat tabel yang ada. Lihat 6 Cara untuk Memeriksa apakah Tabel Ada di SQL Server sebagai contoh.
Opsi 2:Kueri sys.tables
Cara lain untuk memeriksa apakah tabel sudah ada adalah dengan menanyakan sys.tables
tampilan katalog sistem.
Contoh:
IF NOT EXISTS (
SELECT * FROM sys.tables t
JOIN sys.schemas s ON (t.schema_id = s.schema_id)
WHERE s.name = 'dbo' AND t.name = 't1')
CREATE TABLE dbo.t1 (
c1 int,
c2 varchar(10)
);
Itu melakukan hal yang mirip dengan contoh sebelumnya; ia memeriksa keberadaan tabel dan membuatnya hanya jika tidak ada.
Terlepas dari metode yang digunakan untuk memeriksa keberadaan tabel, perintah berhasil diselesaikan, terlepas dari apakah tabel ada atau tidak.
Jadi kita mendapatkan output berikut dari kedua metode:
Commands completed successfully.
Saya mendapatkan pesan itu apakah tabel sudah ada atau belum.
Jika tabel sudah ada, tetapi kita tidak mengecek keberadaan tabel, kita mendapatkan error seperti ini:
Msg 2714, Level 16, State 6, Line 1 There is already an object named 't1' in the database.
Penting untuk dicatat bahwa, hanya karena tabel dengan nama tersebut sudah ada di database, bukan berarti tabel tersebut memiliki definisi yang benar. Metode di atas cukup memeriksa tabel berdasarkan nama dan skema.