Sesuatu seperti ini:
SELECT
*
FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS
WHERE CONSTRAINT_NAME ='FK_TreeNodesBinaryAssets_BinaryAssets'
and TABLE_NAME = 'TreeNodesBinaryAssets'
tetapi untuk indeks.
sql-server
Lieven Cardoen
sumber
sumber
Jawaban:
Anda dapat melakukannya menggunakan pilihan lurus ke depan seperti ini:
sumber
IF EXISTS(SELECT * ...) BEGIN ... END
.YourTableName
harus nama lengkap dengan skemaUntuk SQL 2008 dan yang lebih baru , metode yang lebih ringkas, dengan cara pengkodean, untuk mendeteksi keberadaan indeks adalah dengan menggunakan
INDEXPROPERTY
fungsi bawaan:Penggunaan paling sederhana adalah dengan
IndexID
properti:Jika indeks ada, yang di atas akan mengembalikan ID-nya; jika tidak, itu akan kembali
NULL
.sumber
AdaTheDEV, saya menggunakan sintaks Anda dan membuat yang berikut dan mengapa.
Masalah: Proses berjalan sekali seperempat, mengambil satu jam karena indeks yang hilang.
Koreksi: Ubah proses kueri atau Prosedur untuk memeriksa indeks dan membuatnya jika hilang ... Kode yang sama ditempatkan di akhir kueri dan prosedur untuk menghapus indeks karena tidak diperlukan tetapi setiap triwulan. Hanya Menampilkan drop sintaks di sini
sumber
Namun, sedikit penyimpangan dari pertanyaan awal mungkin berguna bagi orang-orang masa depan yang ingin
DROP
danCREATE
indeks, yaitu dalam skrip penempatan.Anda dapat memintas pemeriksaan yang ada hanya dengan menambahkan yang berikut ke pernyataan buat Anda:
Baca lebih lanjut di sini: CREATE INDEX (Transact-SQL) - DROP_EXISTING Clause
NB Seperti disebutkan dalam komentar, indeks harus sudah ada agar klausa ini berfungsi tanpa menimbulkan kesalahan.
sumber
Jika tujuan tersembunyi pertanyaan Anda adalah
DROP
indeks sebelum membuatINSERT
ke tabel besar, maka ini berguna satu-liner:Sintaks ini tersedia sejak SQL Server 2016. Dokumentasi untuk
IF EXISTS
:https://blogs.msdn.microsoft.com/sqlserverstorageengine/2015/11/03/drop-if-exists-new-thing-in-sql-server-2016/
Jika Anda menggunakan kunci primery, gunakan ini:
sumber
Tulis fungsi di bawah ini yang memungkinkan saya memeriksa dengan cepat untuk melihat apakah ada indeks; berfungsi seperti OBJECT_ID.
EDIT: Ini hanya mengembalikan OBJECT_ID dari tabel, tetapi itu akan NULL jika indeks tidak ada. Saya kira Anda bisa mengatur ini untuk mengembalikan index_id, tapi itu tidak berguna.
sumber
sumber
Untuk memeriksa Indeks Clustered ada pada tabel tertentu atau tidak:
sumber