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

6 Cara untuk Memeriksa apakah Tabel Ada di SQL Server (Contoh T-SQL)

Artikel ini menawarkan lima opsi untuk memeriksa apakah ada tabel di SQL Server. Sebagian besar opsi melibatkan kueri tampilan sistem, tetapi salah satu opsi menjalankan prosedur tersimpan sistem, dan opsi lainnya melibatkan fungsi.

Saya juga menyertakan beberapa IF simple sederhana pernyataan yang dapat dimodifikasi agar sesuai dengan keadaan Anda.

Opsi 1 – Tampilan sys.tables

Opsi ini menanyakan sys.tables tampilan katalog sistem. Tampilan ini mengembalikan baris untuk setiap tabel pengguna. Oleh karena itu, Anda dapat menanyakannya menggunakan nama tabel yang Anda periksa.

Contoh:

SELECT 
  object_id 
FROM sys.tables
WHERE name = 'Artists';

Hasil:

+-------------+
| object_id   |
|-------------|
| 885578193   |
+-------------+

Anda juga dapat menambahkan nama skema ke hal-hal yang Anda periksa. Berikut cara mengubah kueri sebelumnya untuk menyertakan nama skema:

SELECT
  object_id  
FROM sys.tables
WHERE name = 'Artists'
AND SCHEMA_NAME(schema_id) = 'dbo';

Hasil:

+-------------+
| object_id   |
|-------------|
| 885578193   |
+-------------+

Perhatikan bahwa sys.tables view hanya mengembalikan ID skema jadi saya harus meneruskannya ke SCHEMA_NAME() fungsi untuk mendapatkan namanya. Atau saya bisa menggunakan ID skema jika saya tahu itu.

Contoh:

SELECT
  object_id  
FROM sys.tables
WHERE name = 'Artists'
AND schema_id = 1;

Hasil:

+-------------+
| object_id   |
|-------------|
| 885578193   |
+-------------+

Opsi 2 – Prosedur Tersimpan sp_tables

Opsi berikutnya mengeksekusi sp_tables prosedur tersimpan.

Berikut adalah seberapa ringkas kode Anda saat menggunakan metode ini:

sp_tables 'Artists'

Hasil:

+-------------------+---------------+--------------+--------------+-----------+
| TABLE_QUALIFIER   | TABLE_OWNER   | TABLE_NAME   | TABLE_TYPE   | REMARKS   |
|-------------------+---------------+--------------+--------------+-----------|
| Music             | dbo           | Artists      | TABLE        | NULL      |
+-------------------+---------------+--------------+--------------+-----------+

Namun, prosedur tersimpan ini mengembalikan tampilan serta tabel, jadi ada baiknya untuk mempersempitnya menjadi hanya tabel (kecuali jika Anda juga tertarik untuk mengembalikan tampilan). Untuk mempersempitnya menjadi tabel saja, gunakan @table_type = "'TABLE'" .

Saat melakukannya, Anda juga dapat menentukan pemilik tabel dan qualifier tabel.

Contoh:

EXEC sp_tables 
  @table_name = 'Artists',  
  @table_owner = 'dbo',
  @table_qualifier = 'Music',
  @table_type = "'TABLE'",
  @fUsePattern = 1;

Hasil:

+-------------------+---------------+--------------+--------------+-----------+
| TABLE_QUALIFIER   | TABLE_OWNER   | TABLE_NAME   | TABLE_TYPE   | REMARKS   |
|-------------------+---------------+--------------+--------------+-----------|
| Music             | dbo           | Artists      | TABLE        | NULL      |
+-------------------+---------------+--------------+--------------+-----------+

Penting untuk dicatat bahwa @table_type parameter menerima daftar yang dipisahkan koma. Oleh karena itu, ini sedikit berbeda dengan parameter lainnya. @table_type nilai harus diapit oleh tanda kutip ganda, dan setiap item diapit oleh tanda kutip tunggal. Dalam contoh saya, hanya ada satu item daftar, namun tetap harus diapit oleh tanda kutip ganda dan tunggal.

Opsi 3 – INFORMATION_SCHEMA.TABLES

INFORMATION_SCHEMA.TABLES tampilan sistem mengembalikan satu baris untuk setiap tabel atau tampilan dalam database saat ini yang izinnya dimiliki oleh pengguna saat ini. Ini mirip dengan sys.tables , tetapi mengembalikan lebih sedikit kolom. Tampilan skema informasi yang disertakan dalam SQL Server sesuai dengan definisi standar ISO untuk INFORMATION_SCHEMA.

Berikut ini contoh penggunaannya untuk memeriksa apakah ada tabel di database saat ini:

SELECT * 
FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_TYPE = 'BASE TABLE'
AND TABLE_NAME = 'Artists';

Hasil:

+-----------------+----------------+--------------+--------------+
| TABLE_CATALOG   | TABLE_SCHEMA   | TABLE_NAME   | TABLE_TYPE   |
|-----------------+----------------+--------------+--------------|
| Music           | dbo            | Artists      | BASE TABLE   |
+-----------------+----------------+--------------+--------------+

Ini dia lagi, tapi kali ini saya juga tentukan skemanya:

SELECT * 
FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_TYPE = 'BASE TABLE'
AND TABLE_NAME = 'Artists'
AND TABLE_SCHEMA = 'dbo';

Hasil:

+-----------------+----------------+--------------+--------------+
| TABLE_CATALOG   | TABLE_SCHEMA   | TABLE_NAME   | TABLE_TYPE   |
|-----------------+----------------+--------------+--------------|
| Music           | dbo            | Artists      | BASE TABLE   |
+-----------------+----------------+--------------+--------------+

Opsi 4 – Fungsi OBJECT_ID()

Anda juga dapat menggunakan fungsi seperti OBJECT_ID() untuk melihat apakah itu mengembalikan nilai non-NULL.

Contoh:

SELECT OBJECT_ID('Artists', 'U') AS Result;

Hasil:

+-----------+
| Result    |
|-----------|
| 885578193 |
+-----------+

Dalam hal ini, tabel ada. Perhatikan bahwa saya menggunakan U untuk menunjukkan jenis objek (tabel yang ditentukan pengguna).

Anda juga dapat memberikan nama tiga bagian untuk menyertakan database dan skema:

SELECT OBJECT_ID('Music.dbo.Artists', 'U') AS Result;

Hasil:

+-----------+
| Result    |
|-----------|
| 885578193 |
+-----------+

Jika tabel tidak ada, Anda akan mendapatkan NULL :

SELECT OBJECT_ID('Oops!', 'U') AS Result;

Hasil:

+----------+
| Result   |
|----------|
| NULL     |
+----------+

Lihat di bawah untuk contoh penggunaan ini dalam IF pernyataan.

Opsi 5 – Tampilan sys.objects

Seolah-olah tidak ada contoh sebelumnya yang akan melakukan pekerjaan itu, inilah cara lain untuk memeriksa apakah ada tabel.

Kali ini saya menanyakan sys.objects tampilan katalog sistem. Tampilan ini mengembalikan baris untuk setiap objek cakupan skema yang ditentukan pengguna dalam database. Itu tidak hanya mengembalikan tabel, itu mengembalikan semua jenis objek. Oleh karena itu kita perlu mempersempitnya menjadi tabel saja. Dalam hal ini saya hanya tertarik pada tabel yang ditentukan pengguna, jadi saya dapat menggunakan type = 'U' (U adalah untuk “USER_TABLE”). Atau, Anda dapat menggunakan TYPE_DESC = 'USER_TABLE' .

SELECT 
  object_id 
FROM sys.objects 
WHERE type = 'U' 
AND name = 'Artists';

Hasil:

+-------------+
| object_id   |
|-------------|
| 885578193   |
+-------------+

Ini dia lagi, tetapi menentukan skema:

SELECT 
  object_id  
FROM sys.objects 
WHERE type = 'U' 
AND name = 'Artists'
AND SCHEMA_NAME(schema_id) = 'dbo';

Hasil:

+-------------+
| object_id   |
|-------------|
| 885578193   |
+-------------+

Opsi 6 – Tampilan sys.sysobjects (HINDARI)

Opsi ini hanya terdaftar sehingga saya dapat merekomendasikan untuk tidak menggunakannya. sys.sysobjects tampilan disertakan dalam SQL Server untuk kompatibilitas mundur, dan Microsoft menyarankan agar Anda menghindari penggunaan tampilan ini di pekerjaan mendatang.

Jika Anda menemukan kode yang menggunakan tampilan ini, pertimbangkan untuk memodifikasinya menggunakan sys.objects atau tampilan sistem atau prosedur tersimpan lainnya.

Bagaimanapun, inilah contoh sebelumnya jika menggunakan sys.sysobjects bukannya sys.objects .

SELECT
  id  
FROM sys.sysobjects 
WHERE xtype = 'U' 
AND name = 'Artists';

Hasil:

+-----------+
| id        |
|-----------|
| 885578193 |
+-----------+

JIKA Pernyataan 1

Berikut IF sederhananya pernyataan yang memeriksa keberadaan tabel, kemudian mencetak pesan yang berbeda tergantung pada hasilnya. Kode ini dapat dimodifikasi sesuai dengan kebutuhan spesifik Anda.

IF EXISTS 
  (SELECT object_id FROM sys.tables
  WHERE name = 'Artists'
  AND SCHEMA_NAME(schema_id) = 'dbo')
  PRINT 'The table exists'
ELSE 
  PRINT 'The table does not exist';

Hasil:

The table exists

Dan inilah tampilannya saat tabel tidak ada:

IF EXISTS 
  (SELECT object_id FROM sys.tables
  WHERE name = 'Customer'
  AND SCHEMA_NAME(schema_id) = 'dbo')
  PRINT 'The table exists'
ELSE 
  PRINT 'The table does not exist';

Hasil:

The table does not exist

JIKA Pernyataan 2

Ini IF lainnya pernyataan yang dapat dimodifikasi sesuai dengan kebutuhan spesifik Anda.

IF OBJECT_ID('Artists', 'U') IS NOT NULL  
  PRINT 'The table exists'
ELSE 
  PRINT 'The table does not exist';

Hasil:

The table exists

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Apa itu Operator Logika SEPERTI di SQL Server - Tutorial SQL Server / TSQL Bagian 123

  2. Cara Mengembalikan Daftar Tipe Data di SQL Server (T-SQL)

  3. Cara menggunakan pernyataan IF/ELSE untuk memperbarui atau membuat entri node xml baru di Sql

  4. Mengapa SQL Server membulatkan hasil pembagian dua bilangan bulat?

  5. Bagaimana cara mengirim email dari SQL Server?