Di SQL Server, Anda dapat menggunakan sp_tables
prosedur tersimpan sistem untuk mendapatkan daftar tabel dan tampilan di lingkungan saat ini.
Anda dapat mengembalikan semua tabel dan tampilan, atau Anda dapat mempersempitnya ke pemilik, jenis, pola, atau bahkan tabel atau tampilan tertentu.
Sintaks
Sintaksnya seperti ini:
sp_tables [ [ @table_name = ] 'name' ] [ , [ @table_owner = ] 'owner' ] [ , [ @table_qualifier = ] 'qualifier' ] [ , [ @table_type = ] "type" ] [ , [@fUsePattern = ] 'fUsePattern'];
Semua argumen adalah opsional.
Contoh 1 – Tidak Ada Argumen
Anda dapat menjalankan prosedur tersimpan ini tanpa argumen apa pun. Melakukan ini akan mengembalikan semua tabel dan tampilan di lingkungan saat ini.
Seperti ini:
EXEC sp_tables;
Ini mengembalikan lebih dari 500 baris di sistem saya, jadi saya tidak akan memberikan hasilnya di sini. Selain mengembalikan tabel dan tampilan yang ditentukan pengguna, itu juga mengembalikan objek sistem, seperti sys
dan INFORMATION_SCHEMA
tabel dan tampilan.
Contoh 2 – Semua Argumen
Di sisi lain, inilah contoh yang mencakup semua argumen. Ini mempersempit hasil ke nama tabel tertentu, jenis tertentu, kualifikasi tertentu, dan pemilik tertentu.
EXEC sp_tables @table_name = 'Customers', @table_owner = 'Sales', @table_qualifier = 'WideWorldImporters', @table_type = "'TABLE'", @fUsePattern = 1;
Hasil:
+--------------------+---------------+--------------+--------------+-----------+ | TABLE_QUALIFIER | TABLE_OWNER | TABLE_NAME | TABLE_TYPE | REMARKS | |--------------------+---------------+--------------+--------------+-----------| | WideWorldImporters | Sales | Customers | TABLE | NULL | +--------------------+---------------+--------------+--------------+-----------+
Contoh 3 – Mengembalikan Tabel Tertentu
Cara yang lebih mudah untuk mengembalikan tabel tertentu adalah dengan menggunakan argumen pertama.
Seperti ini:
EXEC sp_tables @table_name = 'Customers';
Atau bahkan lebih ringkas, seperti salah satu dari ini:
EXEC sp_tables 'Customers'; sp_tables 'Customers';
Meskipun, perlu diketahui bahwa Anda bisa mendapatkan lebih dari satu baris. Dalam contoh ini, dua baris dikembalikan:
+--------------------+---------------+--------------+--------------+-----------+ | TABLE_QUALIFIER | TABLE_OWNER | TABLE_NAME | TABLE_TYPE | REMARKS | |--------------------+---------------+--------------+--------------+-----------| | WideWorldImporters | Sales | Customers | TABLE | NULL | | WideWorldImporters | Website | Customers | VIEW | NULL | +--------------------+---------------+--------------+--------------+-----------+
Baris pertama untuk tabel dan baris kedua untuk tampilan.
Jika saya tidak tertarik untuk melihat tampilan atau tabel sistem apa pun, saya dapat menambahkan satu argumen lagi untuk menentukan jenis tabel.
Contoh 4 – Mengembalikan Jenis Tabel Tertentu
Di sini, saya menyempurnakan contoh sebelumnya, dengan hanya menentukan jenis tabel yang saya minati, beserta nama tabelnya.
EXEC sp_tables @table_name = 'Customers', @table_type = "'TABLE'";
Hasil:
+--------------------+---------------+--------------+--------------+-----------+ | TABLE_QUALIFIER | TABLE_OWNER | TABLE_NAME | TABLE_TYPE | REMARKS | |--------------------+---------------+--------------+--------------+-----------| | WideWorldImporters | Sales | Customers | TABLE | NULL | +--------------------+---------------+--------------+--------------+-----------+
Jenis yang dapat diterima termasuk VIEW
, TABLE
, dan SYSTEMTABLE
.
Perhatikan bahwa jenis tabel harus huruf besar.
Contoh 5 – Mengembalikan Beberapa Jenis Tabel
Anda mungkin memperhatikan bahwa sintaks untuk tipe tabel menggunakan tanda kutip tunggal dan kutipan ganda. Ini karena ia menerima daftar tipe tabel yang dipisahkan koma. Seluruh daftar diapit dalam tanda kutip ganda, dan setiap item daftar diapit oleh tanda kutip tunggal, dengan koma yang memisahkan setiap item.
Berikut adalah contoh mengembalikan jenis tabel TABLE
dan VIEW
.
EXEC sp_tables @table_type = "'TABLE','VIEW'";
Perhatikan bahwa jika SET QUOTED_IDENTIFIER
adalah ON
, setiap tanda kutip tunggal harus digandakan dan seluruh parameter harus diapit oleh tanda kutip tunggal.
Contoh 6 – Catatan tentang Argumen Tabel Qualifier
Jika Anda menggunakan @table_qualifier
argumen, nilainya harus sama dengan lingkungan saat ini, jika tidak, Anda akan mendapatkan kesalahan. Di SQL Server, kualifikasi tabel mewakili nama database. Di beberapa produk, ini mewakili nama server dari lingkungan database tabel.
Inilah yang terjadi di SQL Server jika saya menggunakan nilai yang berbeda dengan database saat ini:
USE Music; EXEC sp_tables @table_qualifier = 'WideWorldImporters';
Hasil:
Msg 15250, Level 16, State 1, Procedure sp_tables, Line 86 The database name component of the object qualifier must be the name of the current database.
Contoh 7 – Wildcard
Anda dapat menggunakan @fUsePattern
argumen untuk menentukan apakah garis bawah ( _
), persen ( %
), dan tanda kurung siku ( [
atau ]
) karakter ditafsirkan sebagai karakter wildcard. Nilai yang valid adalah 0
(pencocokan pola tidak aktif) dan 1
(pencocokan pola aktif). Nilai defaultnya adalah 1
.
Berikut adalah contoh penggunaan pencocokan pola untuk mengembalikan nama tabel yang dimulai dengan huruf “A”:
EXEC sp_tables @table_name = 'A%', @table_type = "'TABLE'", @fUsePattern = 1;
Hasil:
+-------------------+---------------+--------------+--------------+-----------+ | TABLE_QUALIFIER | TABLE_OWNER | TABLE_NAME | TABLE_TYPE | REMARKS | |-------------------+---------------+--------------+--------------+-----------| | Music | dbo | Albums | TABLE | NULL | | Music | dbo | Artists | TABLE | NULL | +-------------------+---------------+--------------+--------------+-----------+
Tapi inilah yang terjadi jika saya menonaktifkan pencocokan pola:
EXEC sp_tables @table_name = 'A%', @table_type = "'TABLE'", @fUsePattern = 0;
Hasil:
(0 rows affected)