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

7 Cara Mengembalikan Semua Tabel dengan Kunci Utama di SQL Server

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 menanyakan sys.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 memiliki CONSTRAINT_TYPE dari PRIMARY 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 lihat CONSTRAINT_TYPE dari PK 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 seperti OBJECTPROPERTY() fungsi, kecuali bahwa ia mendukung lebih banyak properti. Oleh karena itu, salah satu contoh sebelumnya yang menggunakan OBJECTPROPERTY() , dapat dengan mudah ditulis ulang untuk menggunakan OBJECTPROPERTYEX() .

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, sedangkan OBJECTPROPERTY() mengembalikan int .


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. SQL Server 2012 meminta data Access 2007 menggunakan kesalahan OPENROWSET

  2. EXEC sp_executesql dengan beberapa parameter

  3. Cara menggunakan SqlTransaction di C#

  4. Cara Secara Proaktif Mengumpulkan Informasi Fragmentasi Indeks SQL Server

  5. Apa yang melewati parameter ke SQL dan mengapa saya membutuhkannya?