Saya punya sql ini:
ALTER TABLE dbo.ChannelPlayerSkins
DROP CONSTRAINT FK_ChannelPlayerSkins_Channels
tetapi ternyata, pada beberapa database lain yang kami gunakan, kendala memiliki nama yang berbeda. Bagaimana saya memeriksa apakah ada kendala dengan nama FK_ChannelPlayerSkins_Channels
.
sql-server
information-schema
system-tables
Lieven Cardoen
sumber
sumber
Jawaban:
coba ini:
- EDIT -
Ketika saya awalnya menjawab pertanyaan ini, saya berpikir "Kunci Asing" karena pertanyaan asli bertanya tentang menemukan "FK_ChannelPlayerSkins_Channels". Sejak itu banyak orang berkomentar menemukan "kendala" lain di sini adalah beberapa pertanyaan lain untuk itu:
di sini adalah metode alternatif
Jika Anda memerlukan lebih banyak informasi kendala, lihat di dalam prosedur yang tersimpan sistem
master.sys.sp_helpconstraint
untuk melihat bagaimana mendapatkan informasi tertentu. Untuk melihat kode sumber menggunakan SQL Server Management Studio masuk ke "Object Explorer". Dari sana Anda perluas database "Master", kemudian perluas "Programmability", lalu "Stored Procedures", lalu "System Stored Procedures". Anda kemudian dapat menemukan "sys.sp_helpconstraint" dan klik kanan dan pilih "modifikasi". Berhati-hatilah untuk tidak menyimpan perubahan apa pun padanya. Juga, Anda bisa menggunakan prosedur yang tersimpan sistem ini di tabel mana saja dengan menggunakannyaEXEC sp_helpconstraint YourTableNameHere
.sumber
Cara termudah untuk memeriksa keberadaan kendala (dan kemudian melakukan sesuatu seperti menjatuhkannya jika ada) adalah dengan menggunakan fungsi OBJECT_ID () ...
OBJECT_ID dapat digunakan tanpa parameter kedua ('C' untuk kendala pemeriksaan saja) dan itu juga bisa berfungsi, tetapi jika nama kendala Anda cocok dengan nama objek lain dalam database Anda mungkin mendapatkan hasil yang tidak terduga.
OBJECT_ID juga dapat digunakan dengan "batasan" lain seperti batasan Kunci Asing atau batasan Kunci Utama, dll. Untuk hasil terbaik, selalu sertakan jenis objek yang sesuai sebagai parameter kedua untuk fungsi OBJECT_ID:
Jenis Objek Kendala:
Juga perhatikan bahwa skema sering diperlukan. Skema kendala umumnya menggunakan skema tabel induk.
Kegagalan untuk menempatkan kendala Anda (atau apa pun yang Anda periksa) dalam tanda kurung saat menggunakan metode ini juga dapat menyebabkan negatif palsu - jika objek Anda menggunakan karakter yang tidak biasa (seperti a.), Tanda kurung diperlukan.
sumber
OBJECTPROPERTY(OBJECT_ID('constraint_name'), 'IsConstraint') = 1
agar kompatibel dari versi saat ini hingga sql2000. Tidakdbo
diperlukan skema juga.Jika Anda mencari jenis kendala lainnya, misalnya default, Anda harus menggunakan kueri yang berbeda (Dari Bagaimana cara menemukan kendala standar menggunakan INFORMATION_SCHEMA? Dijawab oleh devio ). Menggunakan:
untuk menemukan batasan default dengan nama.
Saya telah mengumpulkan berbeda 'JIKA tidak Ada "memeriksa di posting saya" DDL' JIKA Tidak Ada "kondisi untuk membuat skrip SQL re-runnable"
sumber
sumber
Apakah Anda melihat sesuatu seperti ini, di bawah ini diuji dalam SQL Server 2005
sumber
Hanya sesuatu yang harus diwaspadai ......
Dalam SQL Server 2008 R2 SSMS, perintah "Script Constraint as -> DROP And CREATE To" menghasilkan T-SQL seperti di bawah ini
Di luar kotak, skrip ini TIDAK menjatuhkan batasan karena SELECT mengembalikan 0 baris. (lihat posting Microsoft Connect ).
Nama batasan default salah tetapi saya kumpulkan juga ada hubungannya dengan fungsi OBJECT_ID karena mengubah nama tidak memperbaiki masalah.
Untuk memperbaikinya, saya menghapus penggunaan OBJECT_ID dan menggunakan nama kendala default sebagai gantinya.
sumber
OBJECT_ID(N'[YourSchema].[DEF_Detail_IsDeleted]')
jika Anda memiliki 2 kendala dengan nama yang sama di skema yang berbeda.Saya menggunakan kueri berikut untuk memeriksa kendala yang ada sebelum saya membuatnya.
Ini kueri untuk kendala dengan nama yang menargetkan nama tabel yang diberikan. Semoga ini membantu.
sumber
sumber
sumber
INFORMATION_SCHEMA
adalah temanmu Ini memiliki semua jenis pandangan yang menunjukkan semua jenis informasi skema. Periksa tampilan sistem Anda. Anda akan menemukan Anda memiliki tiga pandangan berurusan dengan kendala, satu makhlukCHECK_CONSTRAINTS
.sumber
Saya menggunakan ini untuk memeriksa dan remote kendala pada kolom. Itu harus memiliki semua yang Anda butuhkan.
sumber
sumber
Anda dapat menggunakan yang di atas dengan satu peringatan:
Harus menggunakan
name = [Constraint name]
karena tabel mungkin memiliki beberapa kunci asing dan masih belum kunci asing diperiksasumber