Jika Anda merasa perlu menemukan semua tabel yang memiliki kunci utama di SQL Server, artikel ini dapat membantu.
Artikel ini menawarkan tujuh cara untuk mengembalikan semua tabel di database saat ini yang memiliki kunci utama.
Perhatikan bahwa sebagian besar contoh ini hanya mengembalikan tabel – bukan kunci utama itu sendiri. Jika Anda menginginkan daftar kunci utama, lihat 11 Cara Mengembalikan Kunci Utama di SQL Server.
Opsi 1 – OBJECTPROPERTY() dengan sys.tables
Opsi pertama melibatkan penggunaan OBJECTPROPERTY()
berfungsi saat menanyakan sys.tables
tampilan sistem. Fungsi ini menerima TableHasPrimaryKey
argumen. Jika argumen ini memiliki nilai 1
, kita mendapatkan semua tabel yang memiliki kunci utama (jika 0
maka kami mendapatkan semua tabel yang tidak memiliki kunci utama).
SELECT SCHEMA_NAME(schema_id) AS [Schema], nama AS [Table]FROM sys.tablesWHERE OBJECTPROPERTY(object_id, 'TableHasPrimaryKey') =1ORDER BY [Schema], [Table];
Hasil:
+----------+--------+| Skema | Tabel ||----------+---------|| dbo | Album || dbo | Artis || dbo | Negara || dbo | Genre |+----------+--------+
Dalam contoh ini, database saat ini memiliki empat tabel dengan kunci utama.
Contoh yang tersisa akan mengkueri database yang sama, sehingga hasilnya akan sama untuk kueri tersebut.
Opsi 2 – OBJECTPROPERTY() dengan INFORMATION_SCHEMA.TABLES
Contoh ini menggunakan OBJECTPROPERTY()
lagi, tapi kali ini saya menanyakan INFORMATION_SCHEMA.TABLES
lihat.
SELECT TABLE_SCHEMA, TABLE_NAMEFROM INFORMATION_SCHEMA.TABLESWHERE OBJECTPROPERTY(OBJECT_ID(CONCAT(TABLE_SCHEMA, '.', TABLE_NAME)),'TableHasPrimaryKey') =1 ANDTABLE_TYPE='BASE TABLE_SCHEMABY, Hasil:+----------------+--------------+| TABLE_SCHEMA | NAMA_TABEL ||----------------+--------------|| dbo | Album || dbo | Artis || dbo | Negara || dbo | Genre |+----------------+--------------+Opsi 3 – OBJECTPROPERTY() dengan sys.objects
Sekali lagi
OBJECTPROPERTY()
datang untuk menyelamatkan. Kali ini saya menanyakansys.objects
tampilan sistem.SELECT SCHEMA_NAME(schema_id) AS [Schema], nama AS [Table]FROM sys.objects WHERE type ='U'AND OBJECTPROPERTY(OBJECT_ID(CONCAT(SCHEMA_NAME(schema_id), '.', name)), 'TableHasPrimaryKey ') =1ORDER BY [Skema], [Tabel]Hasil:
+----------+--------+| Skema | Tabel ||----------+---------|| dbo | Album || dbo | Artis || dbo | Negara || dbo | Genre |+----------+--------+Opsi 4 – INFORMATION_SCHEMA.TABLE_CONSTRAINTS
Anda dapat menanyakan
INFORMATION_SCHEMA.TABLE_CONSTRAINTS
view untuk mendapatkan daftar tabel dengan kunci utama. Anda perlu memfilter hasil hanya untuk baris yang memilikiCONSTRAINT_TYPE
dariPRIMARY KEY
.SELECT CONSTRAINT_SCHEMA, TABLE_NAMEFROM INFORMATION_SCHEMA.TABLE_CONSTRAINTSWHERE CONSTRAINT_TYPE ='PRIMARY KEY';Hasil:
+---------------------+--------------+| CONSTRAINT_SCHEMA | NAMA_TABEL ||---------------------+--------------|| dbo | Artis || dbo | Genre || dbo | Album || dbo | Negara |+---------------------+--------------+Tampilan ini juga mengembalikan nama batasan, jadi Anda juga dapat menyertakan kolom tersebut jika diperlukan:
SELECT CONSTRAINT_SCHEMA, TABLE_NAME, CONSTRAINT_NAMEFROM INFORMATION_SCHEMA.TABLE_CONSTRAINTSWHERE CONSTRAINT_TYPE ='PRIMARY KEY';Hasil:
+----------------------+--------------+--------- -----------------------+| CONSTRAINT_SCHEMA | TABEL_NAME | CONSTRAINT_NAME ||---------------------+--------------+---------- ----------|| dbo | Artis | PK__Artis__25706B50FCD918B1 || dbo | Genre | PK__Genres__0385057E88BB96F8 || dbo | Album | PK__Albums__97B4BE379FC780BD || dbo | Negara | PK__Negara__10D1609F97ADEC31 |+---------------------+-------------+---------- ---------------------+Opsi 5 – sys.key_constraints
Anda dapat memfilter
sys.key_constraints
lihatCONSTRAINT_TYPE
dariPK
untuk mendapatkan daftar tabel dengan kunci utama.SELECT SCHEMA_NAME(schema_id) AS [Schema], OBJECT_NAME(parent_object_id) AS [Table]FROM sys.key_constraints WHERE type ='PK';Hasil:
+----------+--------+| Skema | Tabel ||----------+---------|| dbo | Artis || dbo | Genre || dbo | Album || dbo | Negara |+----------+--------+Ini dia lagi dengan nama kunci utama:
SELECT SCHEMA_NAME(schema_id) AS [Schema], OBJECT_NAME(parent_object_id) AS [Table], nameFROM sys.key_constraints WHERE type ='PK';Hasil:
+----------+--------+-------------- ------+| Skema | Tabel | nama ||----------+---------+-------------------------- -----|| dbo | Artis | PK__Artis__25706B50FCD918B1 || dbo | Genre | PK__Genres__0385057E88BB96F8 || dbo | Album | PK__Albums__97B4BE379FC780BD || dbo | Negara | PK__Negara__10D1609F97ADEC31 |+----------+--------+-------------------------- -----+Opsi 6 – sys.objects
sys.objects
tampilan sistem adalah yang populer untuk mengembalikan informasi tentang objek cakupan skema, termasuk kunci utama.SELECT SCHEMA_NAME(schema_id) AS [Schema], OBJECT_NAME(parent_object_id) AS [Table]FROM sys.objects WHERE type ='PK';Hasil:
+----------+--------+| Skema | Tabel ||----------+---------|| dbo | Artis || dbo | Genre || dbo | Album || dbo | Negara |+----------+--------+Seperti dua contoh sebelumnya, kita dapat menyertakan
name
kolom tampilan ini untuk menampilkan nama kunci utama:SELECT SCHEMA_NAME(schema_id) AS [Schema], OBJECT_NAME(parent_object_id) AS [Table], nameFROM sys.objects WHERE type ='PK';Hasil:
+----------+--------+-------------- ------+| Skema | Tabel | nama ||----------+---------+-------------------------- -----|| dbo | Artis | PK__Artis__25706B50FCD918B1 || dbo | Genre | PK__Genres__0385057E88BB96F8 || dbo | Album | PK__Albums__97B4BE379FC780BD || dbo | Negara | PK__Negara__10D1609F97ADEC31 |+----------+--------+-------------------------- -----+Opsi 7 – OBJECTPROPERTYEX()
OBJECTPROPERTYEX()
fungsi bekerja sepertiOBJECTPROPERTY()
fungsi, kecuali bahwa ia mendukung lebih banyak properti. Oleh karena itu, salah satu contoh sebelumnya yang menggunakanOBJECTPROPERTY()
, dapat dengan mudah ditulis ulang untuk menggunakanOBJECTPROPERTYEX()
.Misalnya, saya dapat menulis ulang contoh pertama di halaman ini menjadi berikut ini:
SELECT SCHEMA_NAME(schema_id) AS [Schema], nama AS [Table]FROM sys.tablesWHERE OBJECTPROPERTYEX(object_id, 'TableHasPrimaryKey') =1ORDER BY [Schema], [Table];Hasil:
+----------+--------+| Skema | Tabel ||----------+---------|| dbo | Album || dbo | Artis || dbo | Negara || dbo | Genre |+----------+--------+Saya harus menyebutkan bahwa
OBJECTPROPERTYEX()
mengembalikan sql_variant tipe data, sedangkanOBJECTPROPERTY()
mengembalikan int .