Pencarian Google memuntahkan jutaan hit tentang cara menemukan tabel tanpa diindeks cluster, PK biasanya menjadi indeks cluster tabel. Namun, tabel dapat dengan mudah memiliki kunci alami sebagai indeks berkerumun, dan indeks pengganti non-berkerumun, seperti kolom identitas.
Bagaimana cara menemukan semua tabel dalam DB tanpa kunci primer yang ditentukan? Saya memiliki 245 tabel dalam DB ini: inspeksi manual sangat tidak efisien.
sys.tables
sendiri memberikan id dan terima kasih untuk menunjukkan fungsi yang luar biasa ini.objectproperty()
sudah tersedia sejak 2005 dan seterusnya, saya baru saja memeriksa bol, kan?Solusi Mike sangat baik untuk masalah spesifik.
Jika Anda menginginkan lebih banyak fleksibilitas, inilah alternatif yang dapat dengan mudah diubah menjadi kueri yang mengembalikan informasi lain, seperti menemukan semua tabel yang berisi tumpukan, atau menemukan tabel yang tidak memiliki kendala sama sekali .
Setelah sistem (sub) Anda melewati ~ 50 tabel, sangat penting untuk membiasakan diri dengan semua tabel metadata, karena seperti yang Anda katakan, memeriksa setiap tabel secara manual tidak praktis (dan rentan terhadap kesalahan!).
sumber
Fitur Manajemen Kebijakan SQL Server dapat melakukan ini.
Sisi tabel memiliki bidang @HasIndex dan @HasClusteredIndex (serta yang lain yang mungkin berguna, seperti pemicu). Kebijakan dapat dibuat untuk memeriksa kondisi di semua tabel, di semua database, di sejumlah server (menggunakan fitur Central Management Server).
Namun, itu tidak bisa memeriksa keberadaan indeks kunci utama atau batasan. Saya bersumpah bahwa ada bidang @HasPrimaryKey tapi tidak ada di MSSQL2012. Entah saya salah mengingat atau menjadi gila.
Catatan: Manajemen Kebijakan disertakan dengan edisi SQL Server 2012 Enterprise, Business Intelligence dan Standar. Ini tidak tersedia dalam edisi Express.
sumber