Saya ingin menghapus semua batasan default, memeriksa batasan, batasan unik, kunci primer dan kunci asing dari semua tabel dalam database SQL Server. Saya tahu cara mendapatkan semua nama kendala sys.objects
, tetapi bagaimana cara mengisi ALTER TABLE
bagian itu?
sql-server
ddl
constraint
Aaron Bertrand
sumber
sumber
Jawaban:
Anda dapat memperoleh informasi ini dengan mudah dengan bergabung
sys.tables.object_id = sys.objects.parent_object_id
untuk jenis objek tersebut.PRINT
ada hanya untuk eyeballing - jika Anda memiliki banyak kendala, itu mungkin tidak menunjukkan seluruh skrip karena terbatas pada 8K. Dalam kasus tersebut, lihat tip ini untuk cara lain untuk memvalidasi skrip sebelum menjalankan.Setelah Anda puas dengan hasilnya, batalkan komentar pada
EXEC
.sumber
ORDER BY (CASE WHEN c.[type] IN ('PK', 'UQ') THEN 1 ELSE 0 END)
Saya mulai dengan jawaban yang diterima dan memodifikasi struktur untuk menggunakan loop sementara daripada membangun pernyataan sql penuh dalam sql dinamis. Saya suka ini lebih baik karena beberapa alasan.
Permintaan tidak disimpan dalam variabel @sql besar. Implementasi ini memungkinkan Cetak untuk setiap kendala yang dijatuhkan untuk tujuan logging di output. Eksekusi tampak sedikit lebih cepat dalam pengujian unit saya.
sumber